【连载】基于AVR XMEGA-A3BU Xplained控制器的Wifi小车制作(9)

作者: 张小艺
上传时间为: 2014-08-23 01:14 AM
2014-08-23
阅读:

首先是研究舵机,还记得我曾在帖子中说到过 我的舵机模块  从小侄子的遥控飞机上拆下来的   网上查了下舵机的工作原理 它有3根引出线,电源、地,信号线信号为PWM信号,大致意思是 给不同的PWM占空比,舵机会调整到一个固定的角度,然后保持不变,如果外部有扰动,舵机(伺服电机)就会立刻反应消除扰动造成的角度偏 移,恢复之前的角度状态。

我现在变得很好奇,为啥会这样子神奇呢?! 怀着一颗强烈的好奇心,就动手拆开了舵机 舵机1.jpg 舵机2.jpg

发现,原来舵机(伺服电机)内部用的还是直流电机 ,但是它里面额外用了一些电路,一通电时,直流电机就会不停的转,当输入的脉冲信号(PWM)变化时,它的齿轮组就会转到了当外部力促使主轴转动时,(主轴上大致连了一个可调电容),相当于改变了可调电容的容值,然后电路就会检测到,立刻就会做出控制动作,使容值恢复原来的 值,也就相当于控制主轴恢复到之前的角度位置。

当然,最重要的实验就是wifi控制舵机的程序啦,哈哈  这个我也实验成功了,可惜一时欣喜,忘记录制视频了,以后再补上,现在贴出代码先

#include <asf.h> 
#define USART_SERIAL_BAUDRATE               115200 
#define USART_SERIAL_CHAR_LENGTH         
USART_CHSIZE_8BIT_gc 
#define USART_SERIAL_PARITY                     
USART_PMODE_DISABLED_gc #define USART_SERIAL_STOP_BIT            
true int main (void) 
{ board_init(); 
sysclk_init();//调用ASF框架函数初始化时钟 
delay_init(sysclk_get_cpu_hz());//调用ASF框架函数初始化delay服务

struct pwm_config pwm_cfg; pwm_init(&pwm_cfg,PWM_TCE0, PWM_CH_A, 500);    //配置的PWM输出口为PE0

static usart_rs232_options_t USART_SERIAL_OPTIONS = { .baudrate = USART_SERIAL_BAUDRATE, .charlength = USART_SERIAL_CHAR_LENGTH, .paritytype = USART_SERIAL_PARITY, .stopbits = USART_SERIAL_STOP_BIT  };

sysclk_enable_module(SYSCLK_PORT_E, PR_USART0_bm);//Enable the clock for the USART module usart_init_rs232(&USARTE0, &USART_SERIAL_OPTIONS);//Initialize in RS232 mode: uint8_t received_byte;//A variable for the received byte must be added:

while(1) { received_byte = usart_getchar(&USARTE0);//Wait for reception of a character: // usart_putchar(&USARTE0, received_byte);//Echo the character back: switch( received_byte ) { case a: pwm_start(& pwm_cfg,20);  break;   //20%占空比

case b: pwm_start(& pwm_cfg,50); break;   //50%占空比

case c: pwm_start(& pwm_cfg,80); break;   //80%占空比 } } } </asf.h>

总结:   舵机的具体参数还没测试完好,即调整百分之多少的占空比对应的输出角度是多少  这个还有待进一步的验证。

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示