TA的每日心情 | 怒 2014-8-28 17:09 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
|
首先是研究舵机,还记得我曾在帖子中说到过 我的舵机模块 从小侄子的遥控飞机上拆下来的 网上查了下舵机的工作原理 它有3根引出线,电源、地,信号线信号为PWM信号,大致意思是 给不同的PWM占空比,舵机会调整到一个固定的角度,然后保持不变,如果外部有扰动,舵机(伺服电机)就会立刻反应消除扰动造成的角度偏 移,恢复之前的角度状态。
我现在变得很好奇,为啥会这样子神奇呢?! 怀着一颗强烈的好奇心,就动手拆开了舵机
发现,原来舵机(伺服电机)内部用的还是直流电机 ,但是它里面额外用了一些电路,一通电时,直流电机就会不停的转,当输入的脉冲信号(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输出口为PE0static 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> 总结: 舵机的具体参数还没测试完好,即调整百分之多少的占空比对应的输出角度是多少 这个还有待进一步的验证。 |
|