1、单片机制作MCU24本文介绍 AVR 单片机内部 AD 及对舵机的精确控制,将一个 10k 的电位器作为控制器,通过 AVR 单片机(Atmega16)采集电位器输出的模拟量实现舵机角度的精确调节。一、Atmega16简介AVR单片机是美国 ATMEL 公司生产的增强 RISC、内载 Flash 的高性能 8 位单片机,其中 ATmega16 是基于增强的 AVR RISC 结构的低功耗 8 位 CMOS 微控制器。具有 16K 字节的系统内可编程 Flash(具有同时读写的能力,即 RWW),512 字节 EEPROM,1K 字节 SRAM,32 个通用 I/O 口线,32 个通用工作寄存器
2、,用于边界扫描的 JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行 USART,有起始条件检测器的通用串行接口,8 路 10 位具有可选差分输入级可编程增益(TQFP 封装)的 ADC,具有片内振荡器的可编程看门狗定时器,一个 SPI 串行端口,以及六个可以通过软件进行选择的省电模式。它执行速度快,有良好的性能价格比,因而得到越来越广泛的应用。二、舵机简介舵机英文叫 Servo,也称伺服电机。其特点是结构紧凑、易于安装调试、控制简单、大扭力、成本较低等。舵机的主要性能取决于最大力矩和工作速度(一般是以秒/60 度为单位),适用于那些
3、需要角度不断变化并保持的控制系统。舵机通常采用脉宽调制信号(PWM)控制,既给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。其控制信号的周期是20ms 的脉宽调制(PWM)信号,如图 1 所示其中脉冲宽度从 0.52.5ms,相对应舵盘的位置为 0 180 角,呈线性变化。作者/赵田AVR单片机对舵机的精确控制图1 舵机输出转角与输入信号脉冲宽度的关系三、硬件连接Atmega16 最小系统见图 2 所示,在此我们采用Atmega16 的 PA0(ADC0)口作为控制器的输入端连接电位器中
4、间一脚,电位器两边引脚分别接电源 VCC和 GND。旋转电位器便可输出连续变化的电压,此时通过 Atmega16 内部 10 位精度的 AD 实时采样,将输入的模拟量进行转化,进而调节 PWM 的输出占空比。舵机共有三根输入线,分别是电源线 VCC、地线 GND和控制信号线(见图 3)。在这里我们采用 Atmega16的 16 位定时器/计数器实现 PWM 信号的精确输出。输入正脉冲宽度(周期为20ms)0.5ms-90-45459001.0ms1.5ms2.0ms2.5ms伺服电机输出臂位置单片机制作MCU252011.05四、AD采样程序分析在这里采用 Atmega16 片内 2.56V
5、的基准电压,0通道输入连续转换模式。在默认条件下,逐次逼近电路需要一个从 50 kHz 到 200 kHz 的输入时钟以获得最大精度,ADC 模块包括一个预分频器,它可以由任何超过 100 kHz 的 CPU 时钟来产生可接受的 ADC 时钟,在此我们选用 8M 晶振 64 分频。ADC 通过逐次逼近的方法将输入的模拟电压转换成一个 10 位的数字量,存放于 ADC 数据寄存器 ADCH 及 ADCL 中,我们只要读取这个数字量并转换成所需整型即可,具体过程由以下程序完成。图2 Atmega16最小系统 图3 舵机及AD输入12345678910123456789101234567891012
6、345678910123456784039383736353433222324252627282913579246810108642975313231301415161718192021913X2R21KX13k3k3kR3R4R512D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D7PB0(T0)PB1(T1)PB2(AIN0)PB3(AIN1)PB4(SS)PB5(MOS1)PB6(MIS0)PB7(SCK)PD0(RXD)PD1(TXD)PD2(INT0)PD3(INT1)PD4(0C1B)PD5(0C1A)PD6(ICP)PD7(TOSC2)RESTX1X2RXDTXDI
7、NT0INT1PD4PD5PD6PD7PA0(ADC0)PA1(ADC1)PA2(ADC2)PA3(ADC3)PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)APC0APC1LEDLKSECLKBITLK18820BEEPCSLSBSCLSDATCKTMSTD0TD1PC6PC7PC0(SCL)PC1(SDA)PC2(TCK)PC3(TMS)PC4(TD0)PC5(TDI)PC6(T0SC1)PC7(T0SC2)VCCVCCVCCVCCVCCAREFGNDAVCCVCCU1J1J3J4PAPCJ2PHPDVCCVCCVCCD5D6D7RESETTD1TMSTD0TCKV
8、CCVCCVCCVCCR8RESETRESET22PF22PF8MH2Y110kC1C2C3RESETX1X2JP1JP2RESETRXDTXDINT0INT1PD4PD5PD6PD7J2PD5VCCDJADC0123VCCR110k单片机制作MCU26 void ADC_init(void)/AD 初始化子函数 ADCSRA=0 xE4;/ADC 使能;ADC 开始转换;连续转换;64 分频 ADCSRA|=(1ADEN)|(1ADSC)|(1ADATE)|(1ADPS2)|(1ADPS1);可采用 ADC中断 ADMUX=0 xC0;/内部 2.56V 参考电压;输入通道为 PD0;输出结
9、果右对齐 uint ADC_convert(void)/模数转换子函数 uint temp1,temp2;temp1=(uint)ADCL;temp2=(uint)ADCH;/取得模数转换值 temp2=(temp28)+temp1;return(temp2);uint Conv(uint i)/数据转换子函数 long x;uint y;x=(5000*(long)i)/1024;/将变量 i 转换成需要现实的形式 1024 份=2 的 10 次方(低 8 位高两位)y=(uint)x;/x 强制转换成整型 return y;五、舵机控制程序分析在此部分我们使用相位与频率修正 PWM 模式(简称相频修正 PWM 模式)可以产生高精度的、相位与频率都准确的 PWM 波形。我们通过 AD 采样得出的1500 连续变化的整数来控制输出周期为 20ms,脉宽为 0.52.5ms 的脉冲,进而控制舵机由-90 90 角的连续变化。void Pwm_init(void)DDRA|=(110)adc_val=ADC_convert();dis_val=Conv(adc_val);AD_val=dis_val/10;cnt=0;delay(1000);Pwm_vary();END
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1