13054|19

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

TMS28035的ad管脚 不管有没有模拟量输入,都输出高电平(2V)电压? [复制链接]

TMS28035的AD管脚  不管有没有模拟量输入,都输出高电平(2V)电压?这种情况的后果是当外部有模拟量输入时,TMS28035不能正常工作,唯有掉电,再上电 重新下载程序才能正常工作。请各位大虾指教?具体点谢谢。

最新回复

你好,我对你的这段程序感兴趣,可以问一些问题吗?谢谢   详情 回复 发表于 2015-5-28 23:44
 
点赞 关注

回复
举报

110

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
有这样的事
小白路过,帮顶
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 lindabell 的帖子

是啊,很头疼!
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

4
 
AD脚有独立使用的,有复用的。如果对独立使用的AD脚也有这种情况,应该从以下方面考虑:
1、AD脚是否悬空
2、外电路是否与其它高电平有连接。(我也经见过PCB连线短路情况---PCB不合格)
3、芯片损坏。
 
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

5
 
查查是否是PCB连线短路,或元件有焊错,比如二极管焊反了
 
个人签名工程 = 数学+物理+经济
 
 

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

6
 

楼主谈到“唯有掉电,再上电 重新下载程序才能正常工作”

 

28035的ADC引脚可以设为GPIO功能,叫做AIO,是不是楼主什么地方设成了AIO??

 

楼主看一下AIOMUX寄存器,看看发生这种情况的时候,是不是有把ADC设为AIO

 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 hlx3012 的帖子

我现在28035的最小系统上运行AD程序出现这样的情况:A7 0V A6  1.436V
A5 0V A4 0.518V  A3 0.5V  A2 0.412V   A1 1.273V   A0 1.556V   ,我没加模拟量输入啊,还出现这样的情况??   AD
的设置都是默认的,我原以为那些管脚没设置成输入,于是(28035AD采样的一个管脚比如说 ADC-A2/COMp1A/AIO2,我要设定成模拟量输入脚 ,)我这样GpioCtlRegs.AIOMUX1.bit.AIO2=2 ,这样不是把A2配置成模拟量输入管脚麽?我这样试了 还是不行。
 
 
 

回复

424

帖子

0

TA的资源

纯净的硅(高级)

8
 
估计是引脚悬空了
 
 
 

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

9
 
楼主把你的电路图发出来,让大伙看看。

楼主除了ADC有问题,其他的运行都正常吧?

此外ADC引脚之后没有连接其他电路吧。
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 9楼 hlx3012 的帖子

我用的ti的28035最小系统板, 28035的AD管脚都是接一个下拉电阻后悬空的。既然是输入端,运行AD采样程序的时候应该都是低电平吧?但不是。
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

11
 




// Configure PWMs to create Start of Conversion (SOC) pulses for the ADC
//----------------------------------------
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTRU_CMPB; // PWM1 SOCA on CMPB event
EPwm2Regs.ETSEL.bit.SOCASEL = ET_CTRU_CMPA; // PWM2 SOCA on CMPA event

EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable PWM1 SOCA
EPwm2Regs.ETSEL.bit.SOCAEN = 1; // Enable PWM2 SOCA
EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; // Trigger on every event
EPwm2Regs.ETPS.bit.SOCAPRD = ET_1ST; // Trigger on every event

#endif // (INCR_BUILD == 1)
EALLOW;
Comp1Regs.COMPCTL.bit.SYNCSEL = 0; // asynchronous
Comp1Regs.COMPCTL.bit.CMPINV = 1; // invert output
Comp1Regs.COMPCTL.bit.COMPSOURCE = 0; // use internal DAC
Comp1Regs.COMPCTL.bit.COMPDACEN = 1; // enable comparator
Comp1Regs.DACVAL.bit.DACVAL = 764; //number is in Q5 (764=2.463V =>3A)

Comp2Regs.COMPCTL.bit.SYNCSEL = 0; // asynchronous
Comp2Regs.COMPCTL.bit.CMPINV = 1; // invert output
Comp2Regs.COMPCTL.bit.COMPSOURCE = 0; // use internal DAC
Comp2Regs.COMPCTL.bit.COMPDACEN = 1; // enable comparator
Comp2Regs.DACVAL.bit.DACVAL = 986; // number is in Q5 (986=3.18V =>48V)

EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = DC_COMP1OUT; // DCAH = Comparator 1 output
EPwm1Regs.DCTRIPSEL.bit.DCBHCOMPSEL = DC_COMP2OUT; // DCAL = TZ2
EPwm1Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_LOW; // DCAEVT1 = DCAH low(will become active as Comparator1 output goes low)
EPwm1Regs.TZDCSEL.bit.DCBEVT1 = TZ_DCBH_LOW; // DCAEVT1 = DCAH low(will become active as Comparator2 output goes low)
EPwm1Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT1; // DCAEVT1 = DCAEVT1 (not filtered)
EPwm1Regs.DCBCTL.bit.EVT1SRCSEL = DC_EVT1; // DCAEVT1 = DCAEVT1 (not filtered)
EPwm1Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC; // Take async path
EPwm1Regs.DCBCTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC; // Take async path

EPwm1Regs.TZSEL.bit.DCAEVT1 = 1;
EPwm1Regs.TZSEL.bit.DCBEVT1 = 1;

// What do we want the DCAEVT1 and DCBEVT1 events to do? - DCAEVTx events can force EPWMxA
EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_LO; // EPWM1A will go low
EDIS;


//=================================================================================
// INTERRUPT & ISR INITIALISATION (best to run this section after other initialisation)
//=================================================================================
EALLOW;
PieVectTable.EPWM1_INT = &ISR_Run; // Map Interrupt
EDIS;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1; // PIE level enable, Grp3 / Int1
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // INT on Zero event
EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on every event

// Enable Peripheral, global Ints and higher priority real-time debug events:
IER |= M_INT3; // Enable CPU INT3 connected to EPWM1-6 INTs:
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM

//=================================================================================
// BACKGROUND (BG) LOOP
//=================================================================================

//--------------------------------- FRAMEWORK -------------------------------------
for(;;)
{
// State machine entry & exit point
//===========================================================
(*Alpha_State_Ptr)(); // jump to an Alpha state (A0,B0,...)
//===========================================================

}
} //END MAIN CODE


//=================================================================================
// STATE-MACHINE SEQUENCING AND SYNCRONIZATION
//=================================================================================

//--------------------------------- FRAMEWORK -------------------------------------

void A0(void)
{
// loop rate synchronizer for A-tasks
if(CpuTimer0Regs.TCR.bit.TIF == 1)
{
CpuTimer0Regs.TCR.bit.TIF = 1; // clear flag
//-----------------------------------------------------------
(*A_Task_Ptr)(); // jump to an A Task (A1,A2,A3,...)
//-----------------------------------------------------------
VTimer0[0]++; // virtual timer 0, instance 0 (spare
}
Alpha_State_Ptr = &B0; // Comment out to allow only A tasks
}

void B0(void)
{
// loop rate synchronizer for B-tasks
if(CpuTimer1Regs.TCR.bit.TIF == 1)
{
CpuTimer1Regs.TCR.bit.TIF = 1; // clear flag
//-----------------------------------------------------------
(*B_Task_Ptr)(); // jump to a B Task (B1,B2,B3,...)
//-----------------------------------------------------------
VTimer1[0]++; // virtual timer 1, instance 0 (used to control SPI LEDs
SerialCommsTimer++; // virtual timer 1, instance 1 (used by SciCommsGui.c)
}
Alpha_State_Ptr = &C0;
}

void C0(void)
{
// loop rate synchronizer for C-tasks
if(CpuTimer2Regs.TCR.bit.TIF == 1)
{
CpuTimer2Regs.TCR.bit.TIF = 1; // clear flag
//-----------------------------------------------------------
(*C_Task_Ptr)(); // jump to a C Task (C1,C2,C3,...)
//-----------------------------------------------------------
VTimer2[0]++; // virtual timer 2, instance 0 (spare)
}
Alpha_State_Ptr = &A0; // Back to State A0
}


//=================================================================================
// A - TASKS
//=================================================================================
//--------------------------------------------------------
void A1(void) // Slewrates (soft-start) of references (Sepic & LED string current 1-4)
//--------------------------------------------------------
// Task runs every 2ms (CpuTimer0 period [1ms] * 2 "A" tasks active)
// Slows the changing of a controller's reference by SlewStep_Sepic or SlewStep_LED
{
// Dmax Clamping
Coef2P2Z_Sepic[5] = DmaxSepic * 67108;
Coef2P2Z_LED[5] = Dmax_LED * 67108;


//---------------------------------------------------------
SlewError = (VREFsepic_slewed - Vtrgt);
if (SlewError > SlewStepSepic) VREFsepic_slewed = VREFsepic_slewed - SlewStepSepic;
else
if (SlewError < (-SlewStepSepic) ) VREFsepic_slewed = VREFsepic_slewed + SlewStepSepic;
else VREFsepic_slewed = Vtrgt;
//---------------------------------------------------------


//---------------------------------------------------------
SlewError = (IREF_LED[1] - Iset_LED[1]);
if (SlewError > SlewStep_LED) IREF_LED[1] = IREF_LED[1] - SlewStep_LED;
else if (SlewError < (-SlewStep_LED) ) IREF_LED[1] = IREF_LED[1] + SlewStep_LED;
else IREF_LED[1] = Iset_LED[1];
//---------------------------------------------------------
SlewError = (IREF_LED[2] - Iset_LED[2]);
if (SlewError > SlewStep_LED) IREF_LED[2] = IREF_LED[2] - SlewStep_LED;
else if (SlewError < (-SlewStep_LED) ) IREF_LED[2] = IREF_LED[2] + SlewStep_LED;
else IREF_LED[2] = Iset_LED[2];
//---------------------------------------------------------
SlewError = (IREF_LED[3] - Iset_LED[3]);
if (SlewError > SlewStep_LED) IREF_LED[3] = IREF_LED[3] - SlewStep_LED;
else if (SlewError < (-SlewStep_LED) ) IREF_LED[3] = IREF_LED[3] + SlewStep_LED;
else IREF_LED[3] = Iset_LED[3];
//---------------------------------------------------------
SlewError = (IREF_LED[4] - Iset_LED[4]);
if (SlewError > SlewStep_LED) IREF_LED[4] = IREF_LED[4] - SlewStep_LED;
else if (SlewError < (-SlewStep_LED) ) IREF_LED[4] = IREF_LED[4] + SlewStep_LED;
else IREF_LED[4] = Iset_LED[4];
//---------------------------------------------------------

//-------------------
A_Task_Ptr = &A2;
//-------------------
}

//-----------------------------------------------------------------
void A2(void) // Slewrates (soft-start) of references (LED string current 5-8); UART comms
//-----------------------------------------------------------------
// Task runs every 2ms (CpuTimer0 period [1ms] * 2 "A" tasks active)
// Slows the changing of a controller's reference by SlewStep_LED
// SerialHostComms is a function that provides communication with a GUI host if one is connected
{

if(ClearFaultFlg == 1)
{
UOUTsepic = 0;
VREFsepic_slewed = 0;

for (i=0; i<9; i++)
{
IREF_LED = 0;
}

EALLOW;
EPwm1Regs.TZCLR.bit.OST = 1;
EPwm2Regs.TZCLR.bit.OST = 1;
EPwm3Regs.TZCLR.bit.OST = 1;
EPwm4Regs.TZCLR.bit.OST = 1;
EPwm5Regs.TZCLR.bit.OST = 1;
EPwm6Regs.TZCLR.bit.OST = 1;
EDIS;

ClearFaultFlg = 0;
}

//---------------------------------------------------------
SlewError = (IREF_LED[5] - Iset_LED[5]);
if (SlewError > SlewStep_LED) IREF_LED[5] = IREF_LED[5] - SlewStep_LED;
else if (SlewError < (-SlewStep_LED) ) IREF_LED[5] = IREF_LED[5] + SlewStep_LED;
else IREF_LED[5] = Iset_LED[5];
//---------------------------------------------------------
SlewError = (IREF_LED[6] - Iset_LED[6]);
if (SlewError > SlewStep_LED) IREF_LED[6] = IREF_LED[6] - SlewStep_LED;
else if (SlewError < (-SlewStep_LED) ) IREF_LED[6] = IREF_LED[6] + SlewStep_LED;
else IREF_LED[6] = Iset_LED[6];
//---------------------------------------------------------
SlewError = (IREF_LED[7] - Iset_LED[7]);
if (SlewError > SlewStep_LED) IREF_LED[7] = IREF_LED[7] - SlewStep_LED;
else if (SlewError < (-SlewStep_LED) ) IREF_LED[7] = IREF_LED[7] + SlewStep_LED;
else IREF_LED[7] = Iset_LED[7];
//---------------------------------------------------------
SlewError = (IREF_LED[8] - Iset_LED[8]);
if (SlewError > SlewStep_LED) IREF_LED[8] = IREF_LED[8] - SlewStep_LED;
else if (SlewError < (-SlewStep_LED) ) IREF_LED[8] = IREF_LED[8] + SlewStep_LED;
else IREF_LED[8] = Iset_LED[8];
//---------------------------------------------------------


SerialHostComms(); //found in SciCommsGui.c

//-------------------
A_Task_Ptr = &A1; // To make task A3 active, change &A1 to &A3
//-------------------
}

//-----------------------------------------
void A3(void) // SPARE (not active)
//-----------------------------------------
{

//-----------------
A_Task_Ptr = &A1; // To make task A4 active, change &A1 to &A4
//-----------------
}


//=================================================================================
// B - TASKS
//=================================================================================

//----------------------------------- USER ----------------------------------------
//----------------------------------------------------
void B1(void) // SEPIC & Vin Dashboard measurements
//----------------------------------------------------
// Task runs every 10ms (CpuTimer1 period [5ms] * 2 "B" tasks active)
// ADC samples are averaged over "HistPtr" samples and then scaled to real-world units
// see LedCalculations.xls for how scaling was derived.
{
// Measurement code expandable to multiple channels, defined by "NumChannels"
// Voltage measurement calculated by:
// Gui_Vin = VinAvg * K_Vin, where VinAvg = sum of 8 VinR samples
// Gui_Vout = VoutAvg * K_Vout, where VoutAvg = sum of 8 VoutR samples
//
HistPtr++;
if (HistPtr >= HistorySize) HistPtr = 0;

// BoxCar Averages - Input Raw samples into BoxCar arrays
//----------------------------------------------------------------

VsepicH[HistPtr] = VsepicR;
IsepicH[HistPtr] = IsepicR;


VinH[HistPtr] = VinR;

// Sepic Measurements
//----------------------------------------------------------------
// view following variables in Watch Window as:
// Gui_Vin = Q8
// Gui_Vsepic = Q9
// Gui_Isepic = Q?

temp_Scratch=0;
for(i=0; i<8; i++) temp_Scratch = temp_Scratch + VsepicH;
Gui_Vsepic = ( (long) temp_Scratch * (long) K_Vsepic ) >> 15;

temp_Scratch=0;
for(i=0; i<8; i++) temp_Scratch = temp_Scratch + IsepicH;
Gui_Isepic = ( (long) temp_Scratch * (long) K_Isepic ) >> 15;

temp_Scratch=0;
for(i=0; i<8; i++) temp_Scratch = temp_Scratch + VinH;
Gui_Vin = ( (long) temp_Scratch * (long) K_Vin ) >> 15;



Vtrgt = ( (long) Gui_VsetSepic * (long) iK_Vsepic ) >> 14;


//-----------------
B_Task_Ptr = &B2;
//-----------------
}

//------------------------------------------------------------
void B2(void) // LED Dashboard measurements
//------------------------------------------------------------
// Task runs every 10ms (CpuTimer1 period [5ms] * 2 "B" tasks active)
// ADC samples are averaged over "HistPtr" samples and then scaled to real-world units
// see LedCalculations.xls for how scaling was derived.
{

// LED String Measurements
//----------------------------------------------------------------
// view following variables in Watch Window as:
// Gui_ILed[j] = Q15

ILedH[1][HistPtr] = ILed2aR;
ILedH[2][HistPtr] = ILed2bR;
ILedH[3][HistPtr] = ILed3aR;
ILedH[4][HistPtr] = ILed3bR;
ILedH[5][HistPtr] = ILed4aR;
ILedH[6][HistPtr] = ILed4bR;
ILedH[7][HistPtr] = ILed5aR;
ILedH[8][HistPtr] = ILed5bR;

for(j = 0; j<9; j++)
{
temp_Scratch=0;
for(i=0; i<HistorySize; i++) temp_Scratch = temp_Scratch + ILedH[j];
Gui_ILed[j] = ( (long) temp_Scratch * (long) K_ILed ) >> 15;

Iset_LED[j] = ( (long) Gui_IsetLed[j] * (long) iK_ILed ) >> 14;
}


//-----------------
B_Task_Ptr = &B1;
//-----------------
}

//------------------------------------------------------------
void B3(void) // SPARE (not active)
//------------------------------------------------------------
{

//-----------------
B_Task_Ptr = &B1;
//-----------------
}


//=================================================================================
// C - TASKS
//=================================================================================

//----------------------------- USER ----------------------------------------------

//--------------------------------------------------------------
void C1(void) // Coefficient update / control
//--------------------------------------------------------------
// Task runs every 100ms (CpuTimer2 period [50ms] * 2 "C" tasks active)
// Allows user to dynamically change P, I, and D gains while the system is running.
{
// Coefficient Update for 1st (Ch1) Loop
Coef2P2Z_Sepic[0] = Dgain_Sepic * 67108; // B2
Coef2P2Z_Sepic[1] = (Igain_Sepic - Pgain_Sepic - Dgain_Sepic - Dgain_Sepic)*67108; // B1
Coef2P2Z_Sepic[2] = (Pgain_Sepic + Igain_Sepic + Dgain_Sepic)*67108; // B0

Coef2P2Z_LED[0] = Dgain_LED * 67108; // B2
Coef2P2Z_LED[1] = (Igain_LED - Pgain_LED - Dgain_LED - Dgain_LED)*67108; // B1
Coef2P2Z_LED[2] = (Pgain_LED + Igain_LED + Dgain_LED)*67108; // B0


if (HRmode ==1) EPwm1Regs.HRCNFG.bit.EDGMODE = HR_FEP; // Enable
else EPwm1Regs.HRCNFG.bit.EDGMODE = HR_DISABLE;
EDIS;

//-----------------
C_Task_Ptr = &C2;
//-----------------
}

//----------------------------------------
void C2(void) // Merging of LED controls & LED "life"-pulse
//----------------------------------------
// Task runs every 100ms (CpuTimer2 period [50ms] * 2 "C" tasks active)
// Blinks an LED and allows all LED controls to be controlled individually or
// as a group
{
// toggle an LED on the controlCARD
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1; // 1/(2*100ms) = 500Hz blink rate

if (LEDs_linked == 1)
{
for (i=1; i<9; i++)
{
Gui_IsetLed = Gui_IsetLed[1];
}
}

if ( (*ePWM[1]).TZFLG.bit.OST == 1 )
{
FaultFlg = 1;
}
else
{
FaultFlg = 0;
}

//-----------------
C_Task_Ptr = &C1;
//-----------------
}

//--------------------------------------
void C3(void) // SPARE (not active)
//--------------------------------------
{

//-----------------
C_Task_Ptr = &C1;
//-----------------
}

[/code]

 

 

 

这个是代码,排除硬件的问题。单独在28035上跑这个代码的时候,28035的ADC A2输出的电压是0.5V。很奇怪为什么不是oV?作为输入管脚。当这个管脚接到模拟量的时候,程序中FaultFlag=1;这时候PWM被强制输出低电平。就是我上面说的情况。但是不我不接这个管脚 确不会出现这样的情况。

 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

12
 
我是做LED的,用的28035.遇到上面的问题。我QQ675424388.希望和哪位高人交流下。
 
 
 

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

13
 
楼主,我在我的DEMO板上看了一下,ADC引脚不应该有电压输出。

我说下我的看法:

1、芯片很简单只要有正确的供电正确的时钟(28027内置时钟,所以这条去掉)那芯片就能正常运行,否则这叫BUG。

2、既然楼主的其他程序能正常运行,就ADC有问题,那楼主确认一下,芯片的模拟供电对不对,VDDA,VSSA
3、如果都对,那这不是芯片问题,这是外部问题。
4、如果是外部问题,楼主可以通过割线看看断开外部连接是否还有这个问题
5、如果是外部电路问题,那么楼主可以把外部电路发上来让大伙瞧瞧。
 
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

14
 
楼主,是否有通过比如示波器之类看看实际电压是多少,再看看你程序显示出来的电压是多少。
 
个人签名工程 = 数学+物理+经济
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

15
 
TMS320F28035PN-80pin电路图.pdf (92.56 KB, 下载次数: 32) 2805的最小系统控制板。原因是AD采样的电压大于零(电流采样的值)的时候,比较模块里的输出会让epwm强制输出低。程序这样设置的。现在我把基板的采样芯片去掉了 就没事了。但没了过流检测功能。我用的是OPA354的采样芯片。给芯片上电没加输入信号 就输出3V的电压。是芯片坏了麽?
 
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

16
 
没有太明白楼上的,想要表达的意思
 
个人签名工程 = 数学+物理+经济
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

17
 

用山姆大叔的 TI-28035後的一些經驗分享希望對國人有幫助

 

 

1.任一輸入ADC PIN 輸入電壓不可超過VDC 3.0V  , 否則會串擾影響其它通道轉換結果

2.不用的ADC腳一定要接1K歐姆以下的電阻至GND,否則也會影響其它通道轉換結果

3.小心A/D輸入端的接腳電容量不可太大而且一定要調整轉換時間

4.VREF參考電壓設定請使用內部參考電壓.

5.如果你的A/D轉換值跳動在TI提出A/D的公式計算結果個位數範圍內也就是12BIT的轉換調校正確了,

   否則就是你的印刷電路板沒有做好A/D輸入與接地迴路短粗佈局原則或其它抗雜訊電路處理

   如L.C濾波器或使用OPA的主動型低通濾波器等等.

 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

18
 
应该是设置为AIO了吧
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

19
 
既然重新上电能使AD恢复正常工作,那说明AD是好的,可能是AD囗寄存器在什么地方修改了,带个仿真器查一下AD口异常时的相应寄存器,问题很快就能搞定
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

20
 
你好,我对你的这段程序感兴趣,可以问一些问题吗?谢谢
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表