welcom ! Handel home

顯示具有 ADC of STM32 M3 標籤的文章。 顯示所有文章
顯示具有 ADC of STM32 M3 標籤的文章。 顯示所有文章

2015年8月27日 星期四

MosFet Current Control by PWM

由 錳銅線 偵測電流壓降  經過差動放大 由 MCU ADC 計算及時電流 後
以 PWM 調整 MOSFET 提供定電流 調整 以匹配負載的變化




2014年9月5日 星期五

AD620 儀表放大器 OP Note

AD620仪表放大器: 低漂移、低功耗仪表放大器,增益设置范围1至10000
  AD620是一款低成本、高精度仪表放大器,仅需要一个外部电阻来设置增益,增益范围为1至10,000。此外,AD620采用8引脚SOIC和 DIP封装,尺寸小于分立电路设计,并且功耗更低(最大电源电流仅1.3 mA),因而非常适合电池供电及便携式(或远程)应用。
  AD620具有高精度(最大非线性度40 ppm)、低失调电压(最大50 µV)和低失调漂移(最大0.6 µV/°C)特性,是电子秤和传感器接口等精密数据采集系统的理想之选。它还具有低噪声、低输入偏置电流和低功耗特性,使之非常适合ECG和无创血压监测仪等医疗应用。
  由于其输入级采用Superßeta处理,因此可以实现最大1.0 nA的低输入偏置电流。AD620在1 kHz时具有9 nV/ÖHz的低输入电压噪声,在0.1 Hz至10 Hz频带内的噪声为0.28 µV p-p,输入电流噪声为0.1 pA/ÖHz,因而作为前置放大器使用效果很好。同时,AD620的0.01%建立时间为15 µs,非常适合多路复用应用;而且成本很低,足以实现每通道一个仪表放大器的设计。




  AD620 组件介绍
  AD620 的基本特点为精确度高、使用简单、低噪声,此仪表放大器有高输入阻抗:10GΩ||2pF,高共模具斥比高(CMR):100dB,低输入抵补电压( Input offset Voltage):50uV,低输入偏移电流(Input bias current):1.0nA,低消耗功率:1.3 mA,以及过电压保护等特性应用十分广泛。


AD620 的规格特性总览表。然而会选用它,是因它价格还算可以、增益值大、漂移电位低等,正好符合成本合理及有效放大惠斯顿电桥所输出的微小变化讯号。
  图3为将选用之仪表放大器IC-AD620 接脚示意图,其中的1、8 接脚要跨接一个电阻来调整放大倍率,然而方程式1为AD620的增益与可调电阻的关系式,由此二式我们即可推算出各种增益所要使用的电阻值GR值。


AD620和AD623有哪些区别?可以互换吗?
  AD620和AD623都是单仪表放大器,引脚的排列也完全一样。
  主要的差别是:AD620必须使用正负电源,AD623即可正负电源也可单电源。
  原板是AD620,则可以用623替换;如果原板是AD623,则不一定能用620替换(要看原板电路的电源是双电源还是单电源)。
  单片机产品中AD620和AD623替换后,程序不修改也能正常工作。

#p#AD620中AD705的作用的一些问题#e#
  AD620典型应用电路中AD705的作用的一些问题?
  AD705的作用是电压跟随,做个模拟地。如果电桥四个电阻匹配的话(即AD620正负输入关为0)6脚应该输出2V.。输出0.69V应该是电阻不匹配共模电压不为0所至(如果RG取120欧放大倍数得四百多,有1mV多共模电压就会导至这个结果,实际接压力传感器之类应做个恒流源取样,则不会这样),建议直接将放大器正负输入端短路试试。AD的数字地应接5V的GND上,不能接2V。图中AD参考电压是1V。
  放大器AD623和AD620可以互换吗?AD705的输出接AD620的5脚。无信号输入时ADC接收为2V,由于ADC不能接收负信号,而电子枰之类的有时需要负信号,所以2V当做ADC的0 点,这样可以采集负信号。如果不需要负信号的话,AD705的输出可接ADC的COM端。(看ADS7841说明应该是这样,我做类似电路时用的ADC是单片机自带的,没用过ADS7841)
  ADC数字与模拟信号是分开的(可用一个电源,也可用分开的两个电源),数字电源为V+、GND,模拟信号0点为COM输入,满幅为Vref输入。 ADS7841中CH0-CH3、COM、Vref脚为模拟输入,其余脚均为数字信号IO。如果数字模拟用一个5V电源(一般这样用),由于GND是数字地,则GND只能接0V。如果COM点接AD705,则图中AD数值0至最大值表示2-3V(这样好象意义不大)。
  所以按楼主的图,如果想测负信号,COM接GND,Vref接5V,则采集的AD信号输入0-2V时信号为负,2-5V时为正。如果只测正信号,则AD705输出接COM,5V接Vref。

#p#AD620仪表放大器比op07好在哪里#e#
  AD620仪表放大器比op07好在哪里?
  桥式电路后面接差分放大。op07也可以单片实现差分放大。感觉ad620效果要好些,但比较了下手册,失调电压,失调电流,偏置电流等方面 ad620都略小于OP07
  这是怎么回事?用620比07电路实现方面要简单,少了几个电阻。 但手册参数上为什么反而不如op07呢?
  答:不能看单个器件的数据,因为如果采用运放构建仪放的话是一堆器件。其它不说,单就输入阻抗和对称性来讲,仪表放大器存在独特的优势,而这才是使用仪表放大器的初衷(差分对称输入)。
  1片op07 加4个电阻 实现的 差分放大电路 ,这种电路和1片ad620实现放大,性能上差别主要体现在两者的输入端特性上。仪表放大器具有对称电特性的正负差分输入端且其输入阻抗非常大,这是接“平衡差分信号”的首要条件。而这些“1片op07 加4个电阻 实现的 差分放大电路”不具备。

#p#STC与AD620的小信号采集系统#e#
  典型案例分析:基于STC12C5A60S2与AD620的小信号采集系统
  在许多电子设备中需要对微弱信号进行高精度处理,因此需要采用仪器放大器,常见的有传统三运放仪器放大器和单片仪器放大器。由于单片仪器放大器的高精度、低噪声及易于控制、设计简单等特点,深受设计者喜爱。
  AD620作为一款单片仪器放大器,具有低功耗,通过外部电阻可实现高增益的芯片,同时具有低输入漂移和温漂等特点。
  STC12C5A60S2是一款具有A/D转换功能的新一代8051单片机,指令代码完全兼容传统8051,但速度快8~12倍。具有8路高速10位输入型A/D转换(250 k/s),可做温度检测、电池电压检测、按键扫描、频谱检测等。用户可将任何一路设置为A/D转换,不需作为A/D使用的口可继续作为I/O口使用。
  文中介绍了如何利用STC12C5A60S2和AD620等芯片设计并完成小信号(电压型)的采集系统。
  1 系统硬件设计
  1.1 系统原理框图
  一般信号在使用前,需要先滤波后放大,或者先放大后滤波,然后经过A/D等手段获取(感知)信号。对于小信号而言,信号幅值只有几毫伏,甚至更小,如果先滤波,可能会将有用信号滤除,因此,在这种情况下,需要先进行放大,然后滤波,再进行A/D转换或其他处理。根据本系统特点,系统中存在的干扰可以忽略,因此不考虑信号滤波环节,因此,系统主要通过信号提取、信号放大、A/D采集3个重要环节实现。第3个环节产生的数据,可以指导人们的工作,或显示相关的信息。整个系统原理框图如图1所示。














2014年7月24日 星期四

STM32 PWM by TIM3 demo Note


TIM3 PWM  輸出定義 (CH1 ..4) 


TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 
TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 
TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 
TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 

PA.06: (TIM3_CH1)
PA.07: (TIM3_CH2)
PB.00: (TIM3_CH3)


PB.01: (TIM3_CH4)


  • PWM configuration
    • TIM_Prescaler : 將TIMxCLK除以(TIM_Prescaler + 1)
    • TIM_CounterMode : 選擇計數模式
    • TIM_Period : TIMx_ARR,counter 週期
    • TIM_OCPolarity: 設置輸出極性
    • TIM_OCMode: PWM模式
      • PWM 1 Mode :
        • 在向計數,TIMx_CNT時,輸出為1,否則輸出為0;
        • 在向計數,TIMx_CNT>TIMx_CCRx時,輸出為0,否則輸出為1。
      • PWM 2 Mode :
        • 在向計數,TIMx_CNT時,輸出為0,否則輸出為1;
        • 在向計數,TIMx_CNT>TIMx_CCRx時,輸出為1,否則輸出為0。
    • TIM_Pulse: 即TIMx_CCRx暫存器,設定脈衝寬度
    • 輸出脈波週期 = (TIM_Period + 1) * (TIM_Prescaler + 1) / TIMxCLK
     











Demo Code

調試晶片:STM32F103C8T6
外部晶振:8MHz
功能介紹:使用Timer3實現兩路(可四路)PWM波形的輸出
代碼如下:
    初始化:系統時鐘初始化,GPIO埠初始化,Timer初始化
[list Flow]
系統時鐘初始化: 
1.  /* 配置系統時鐘為72M */ 
2.  SystemInit(); 

[ GPIO埠初始化:]
1.  /****************************************************************
2.   * 函數名:void GPIO_Config(void) 
3.   * 描述  :配置複用輸出PWM時用到的I/O 
4.   * 輸入  :無 
5.   * 輸出  :無 
6.   * 調用  main()調用 
7.   ***************************************************************/ 
8.  void GPIO_Config(void)  
9. 
10.   GPIO_InitTypeDef GPIO_InitStructure; 
11.  
12.   /* GPIOA and GPIOB clock enable */ 
13.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  
14.  
15.   /*GPIOA Configuration: TIM3 channel 1 and 2 as alternate function push-pull */ 
16.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7; 
17.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;           // 複用推挽輸出 
18.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
19.   GPIO_Init(GPIOA, &GPIO_InitStructure); 
20.
[ Timer初始化:]
1.  /**************************************************************** 
2.   * 函數名:void TIM3_Config(void)  
3.   * 描述  :配置TIM3輸出的PWM信號的模式 
4.   *      CH1:輸出 T=2.5ms(f=1/2.5ms=400Hz)  D=0.6PWM(高電平在前,低電平在後) 
5.   *      CH2:輸出 T=2.5ms(f=1/2.5ms=400Hz)  D=0.4PWM(高電平在後,低電平在前) 
6.   *      步驟一:通過TTIMxCLK的時鐘源確定TIM_PeriodTIM_Prescaler  
7.   *          T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK=2.5ms  
8.   *          因為 TIM_Period<65535 span="">,所以 TIM_Prescaler>1, TIM_Prescaler=2 
9.   *          所以 TIM_Period=59999=0xEA5F 
10.  *      步驟二:根據TIM_Period的值,高低電平的先後D,確定CCRTIM_OCPolarity 
11.  *          CH1:因為D=0.6,先高後低; 
12.  *              所以CCR1=(TIM_Period+1)* D=36000;TIM_OCPolarity=TIM_OCPolarity_High 
13.  *          CH2:因為D=0.4,先高後低; 
14.  *              所以CCR1=(TIM_Period+1)* (1-D)=36000;TIM_OCPolarity=TIM_OCPolarity_Low 
15.  *      步驟三:基礎寄存器初始化 
16.  *      步驟四:通道寄存器初始化 
17.  *      步驟五:使能TIM3重載寄存器ARR 
18.  *      步驟六:使能TIM3  
19.  * 輸入  :無  
20.  * 輸出  :無  
21.  * 調用  main()調用  
22.  ***************************************************************/  
23. void TIM3_Config(void)  
24. {  
25.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
26.     TIM_OCInitTypeDef  TIM_OCInitStructure;  
27.     /* PWM信號電平跳變值 */  
28.     u16 CCR1= 36000;          
29.     u16 CCR2= 36000;  
30.     /*PCLK1經過2倍頻後作為TIM3的時鐘源等於72MHz*/  
31.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  
32.     /* Time base configuration */                                            
33.     TIM_TimeBaseStructure.TIM_Period =0xEA5F;  
34.     TIM_TimeBaseStructure.TIM_Prescaler = 2; 
        //設置預分頻:預分頻=2,即為72/3=24MHz  
35.     TIM_TimeBaseStructure.TIM_ClockDivision = 0;  //設置時鐘分頻係數:不分頻  
36.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;     
        //向上計數溢出模式  
37.     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  
38.     /* PWM1 Mode configuration: Channel1 */  
39.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                    
       //配置為PWM模式 
40.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;                
41.     TIM_OCInitStructure.TIM_Pulse = CCR1     
        //設置跳變值,當計數器計數到這個值時,電平發生跳變  
42.     TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High;
        //當計時器計數值小於CCR1時為高電平  
43.     TIM_OC1Init(TIM3, &TIM_OCInitStructure);             //使能通道1      
44.     TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  
45.     /* PWM1 Mode configuration: Channel2 */  
46.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;  
47.     TIM_OCInitStructure.TIM_Pulse = CCR2;
       //設置通道2的電平跳變值,輸出另外一個占空比的PWM  
48.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;                  
        //當計時器計數值小於CCR2時為低電平 
49.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);             //使能通道 
50.     TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  
51.     TIM_ARRPreloadConfig(TIM3, ENABLE);         //使能TIM3重載寄存器ARR  
52.     /* TIM3 enable counter */  
53.     TIM_Cmd(TIM3, ENABLE);                               //使能TIM3   
54.
     主函數代碼:
1.  /*************************************************************** 
2.   * 函數名:main 
3.   * 描述  :主函數 
4.   * 輸入  :無 
5.   * 輸出  :無 
6.   ***************************************************************/ 
7.  int main(void
8. 
9.      SystemInit(); 
10.     GPIO_Config(); 
11.     TIM3_Config(); 
12.     while (1) 
13.     { 
14.      
15.     } 
16.