




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理及接口技术课程项目设计报告基于arm的可视化无线环境探测机器人学 生:张容琛 林琳 金永范 授课教师: 赵金宪 2015年1月4日基于arm的可视化无线环境探测机器人学生:张容琛 林琳 金永范老师:赵金宪摘 要:随着制造业与电子工业的发展,机器人代替人来执行某些危险或繁重的工作已经成为技术应用的主流。本次制作研究的对象就是一种可以通过传感器捕获环境信息,利用无线设备发送给远程控制端,同时可以通过遥控进行远程作业的机器人。该机器人由4电机驱动,同时装有4自由度的机械臂与一个可自由转向270度的摄像头云台。控制芯片采用arm cortex m3内核的stm32单片机,同时配有路由器,720p高清摄像头,nrf24无线设备,ds18b20温度传感器与sim900a通讯设备。通过路由器和nrf24将摄像头捕获的图像信息以及温度传感器捕获的温度信息传送至远程控制端,若温度高于设定值,则机器人发出报警,通过sim900a向使用者发送报警短信,使用者则可以在远程控制端通过上位机软件利用nrf24进行远程操作,利用机械臂完成某些作业。由此,可避免在危险环境下对人产生不必要的伤亡,降低了火情发生时危害人生命安全的可能性。关键词: 机器人 环境监测 arm 无线 上位机the wireless visual environment monitoring robot based on armundergraduate:张容琛 林琳 金永范supervisor:赵金宪abstract: 目录1 前言2 系统总体设计 2.1 系统设计思路 2.2 系统模块设计及原理 2.21 stm32最小系统模块 2.22 电机驱动模块 2.23舵机驱动模块 2.24 sim900a模块 2.25 nrf24l01无线模块 2.26 ds18b20温度传感器 2.3 程序实现方法 2.31 电机驱动程序 2.32 舵机驱动程序 2.33 sim900a驱动程序 2.34 nrf24l01驱动程序 2.35 ds18b20采集程序3上位机程序设计参考文献收获与体会附录1前言信息技术是当前高技术发展中的主流技术,它的发展对其它技术会产生极大的影响。而随着工业的发展,机器人可以代替或者协助人类完成各种工作,凡是枯燥的、危险的、有毒的、有害的工作,都可由机器人大显身手。机器人除了广泛应用于制造业领域外,还应用于资源勘探开发、救灾排险、医疗服务、家庭娱乐、军事和航天等其他领域。机器人是工业和非产业界的重大生产和服务性设备,也是先进制造技术领域不可缺少的自动化设备。如今,机器人技术将借助信息技术而发展,及利用先进无线通讯技术发展。无线机器人就是有说服力的例子,这两者的结合是必然的趋势。基于无线技术的机器人控制就是利用无线设备实现远程的机器人控制。无线设备的传输速率,时间迟延,数据丢失等是无线机器人控制所面临的问题。而无线机器人的出现,将作为一种特殊的自动化设备,具备远程监控技术,在不适于人类从事的工作环境中,代替人类进行某种作业,减少人类在恶劣的工作环境下出现安全事故的概率。对于高危险性的工作来说,无线机器人是最好的执行者。2 系统总体设计2.1系统设计思路整个系统由 4轮车模、4自由度机械臂、270度自由度摄像头云台、电机驱动模块、stm32最小系统板、sim900a模块、nrf24l01无线模块、路由器、摄像头、温度传感器、集成板 组成。路由器摄像头stm32控制系统nrf24l01主机nrf24l01从机温度传感器摄像头转向摄像头云台机械臂舵机机械臂抓取短信报警sim900a模块4电机转向转速电机驱动模块stm32控制系统 通过下图整合连接可实现设计要求。pc控制端 图2-12.2系统模块设计及原理2.21 stm32最小系统模块本次制作使用的stm32最小系统板是由德飞莱公司制造的stm32f103zet6核心板。有7组i/o口,共144个引脚,片内资源非常强大,包括cortex m3 内核,dma总线,sram(512mb),fsmc,apb/ahb桥,flash(512mb),rcc总线时钟,st系统时钟,12位18路a/d转换,8个定时器等等。该最小系统将spi通信引脚单独引出,方便了使用者外接nrf24l01无线设备,同时带有5v转3.3v的稳压芯片,也方便供电。stm32总线结构如图2-2图2-2最小系统原理图如图2-3图2-32.22 电机驱动模块电机驱动芯片我选择btn7960,因为这是一个集成的高电流半桥,与大多数驱动芯片使用门电路不同,它的内部驱动结构是由一个p沟道高策mos管和一个n沟道mos低边带集成的,由于p沟道高侧开关需要一个电荷泵,因此可以消除电磁干扰。同时它具有工作时处于开关模式限制电流,可以降低功耗,过压锁定,欠压关闭的优点。其内部原理图如图2-4图2-4电机驱动模块原理图如图2-5图2-52.23舵机驱动模块在本次制作中,机械臂的扭力大小和灵活度是衡量机器人性能好坏的一个重要标准,因此我们选择mg996舵机作为机械臂的动力驱动。其扭力为9.4kg/cm(4.8v)反应速度为0.17sec/60degree(4.8v) 工作死区为 5us,性能精度较一般舵机要好。舵机的驱动原理是控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。举个例子,mg996舵机的自由度为270度,接受信号的高电平宽度若为1.5ms,则舵机转轴处于135度位置,若高电平宽度为2.5ms,则舵机转轴处于270度位置。由此可以得出结论,舵机的驱动是依靠占空比不断变化的周期为20ms的pwm波来实现的,而pwm波的占空比则决定了舵机转轴的角度。舵机驱动原理图如图2-6图2-62.24 sim900a模块sim900a可以在2种频段下工作,其工作频段为:egsm 900mhz和dcs 1800mhz,同时内嵌有tcp/ip协议同时扩展了at命令,使用户可以方便使用tcp/ip协议。同时板载cp2102转换芯片、耳机和麦克风接口,可实现语音通话,短信,gprs上网,串口通信等功能。模块功能图如图2-7图2-7模块原理图如图2-8图2-82.25 nrf24l01无线模块nrf24l01模块的核心是由nordic公司生产设计的无线传输芯片nrf24l01+,在本制作中,我们使用的无线模块是经过改良后的无线模块(增加了射频开关带通滤波器)令通信距离得到了扩展。nrf24l01的传输速率为2mbps,通信频率为2.4ghz,可外接天线,同时功耗极低。nrf24l01与单片机之间的通信使用spi通信协议,这是一种多用途的通信协议,spi允许芯片与外部设备以半/全双工、同步、串行方式通信。通信特点是有主、从模式操作,sck时钟信号极性和相位可编程,可选8位或16位传输帧格式,接受或发送完成时可触发中断标志位等。nrf24l01管脚图如图2-9图2-9spi通信时,主设备通过mosi把数据发送给从设备,从设备通过miso引脚回传数据。主设备和从设备使用的是同一个时钟信号,即为由主设备发送给从设备的sck时钟信号。spi通信流程如图2-10图2-102.26 ds18b20温度传感器ds18b20是常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。其内部结构主要由四部分组成:64位光刻rom,温度传感器,温度报警触发器th和tl,配置寄存器。ds18b20在出厂时以配置为12位,读取温度时共读取16位,前5个位为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正 数。温度为正时读取方法为:将16进制数转换成10进制即可。温度为负时读取方法为:将16进制取反后加1,再转换成10进制即可。ds18b20内部结构如图2-11图2-11温度读取值与寄存器值对照表如图2-12图2-122.3程序实现方法程序总体设计思路为,pc控制端通过串口通信向主机发送控制数据,主机通过nrf24l01向从机发送控制数据,从机接收到主机的控制信号之后向主机发送反馈信号,主机再通过串口通信向pc控制端发送来自从机的反馈信号。由此可以实现pc对从机的远程控制。具体实现方法则通过定时器中断函数实现,令主机每10ms进行一次扫描检查pc端是否发出控制信号,若pc端发出控制信号,则通过中断函数向从机发出相应的控制命令,从机端每100ms进行一次扫描检查主机端是否发出命令,若主机发出命令则通过中断函数执行命令并将接收到的信号反馈给主机端,主机再通过中断函数将反馈信号用串口通信发送给pc端。2.31 电机驱动程序在stm32编程环境下,使用gpio时,需要先对其进行初始化,配置io时钟,输出模式,频率,引脚参数等。void mac_init(void) gpio初始化 gpio_inittypedef gpio_initstructure;rcc_apb2periphclockcmd(rcc_apb2periph_gpiod, enable); gpio_initstructure.gpio_pin = gpio_pin_9|gpio_pin_10|gpio_pin_11|gpio_pin_12; gpio_initstructure.gpio_speed = gpio_speed_50mhz; gpio_initstructure.gpio_mode = gpio_mode_out_pp; gpio_init(gpiod, &gpio_initstructure); void go(void) d9_high(); d10_low(); d11_high(); d12_low(); void tr(void) d9_high(); d10_low(); d12_low(); d11_low(); void tl(void) d10_low(); d9_low(); d11_high(); d12_low(); void ba(void) d10_high(); d9_low(); d12_high(); d11_low(); void st(void) d10_low(); d9_low(); d12_low(); d11_low(); 2.32 舵机驱动程序在驱动舵机时,需要先配置定时器,利用定时器产生pwm波来驱动舵机,而若要产生变化的pwm波,则可以调用stm32库中的tim_setcomparex(timx,n)函数。由于程序过于复杂,下面只给出定时器4的初始化及pwm波初始化配置函数及单舵机驱动子函数。static void tim4_gpio_config(void) /定时器4初始化函数gpio_inittypedef gpio_initstructure; /*设置tim3时钟为72mhz */ rcc_apb1periphclockcmd(rcc_apb1periph_tim4, enable); /* gpioa 和 gpiob 时钟使能 */ rcc_apb2periphclockcmd(rcc_apb2periph_gpiob | rcc_apb2periph_afio, enable); /* tim4通道1和通道2输出引脚定义 */ gpio_initstructure.gpio_pin = gpio_pin_6 | gpio_pin_7; gpio_initstructure.gpio_mode = gpio_mode_af_pp; / 复用推挽输出 gpio_initstructure.gpio_speed = gpio_speed_50mhz; gpio_init(gpiob, &gpio_initstructure); /*tim4通道3和通道4输出引脚定义 */ gpio_initstructure.gpio_pin = gpio_pin_8 | gpio_pin_9; gpio_init(gpiob, &gpio_initstructure);static void tim4_mode_config(void)tim_timebaseinittypedef tim_timebasestructure;tim_ocinittypedef tim_ocinitstructure;/* pwm电平信号跳变初值 */ u16 ccr1_val = 1500; u16 ccr2_val = 1500; u16 ccr3_val = 1500; u16 ccr4_val = 1500;/* -pwm占空比计算公式- tim3 channel1 duty cycle = (tim3_ccr1/ tim3_arr+1)* 100% = 50% tim3 channel2 duty cycle = (tim3_ccr2/ tim3_arr+1)* 100% = 37.5% tim3 channel3 duty cycle = (tim3_ccr3/ tim3_arr+1)* 100% = 25% tim3 channel4 duty cycle = (tim3_ccr4/ tim3_arr+1)* 100% = 12.5% - */* time base configuration */ tim_timebasestructure.tim_period = 20000; /定时器计数周期 tim_timebasestructure.tim_prescaler = 71; /设置预分频为72分频 tim_timebasestructure.tim_clockdivision = tim_ckd_div1 ;/设置时钟分频系数 tim_timebasestructure.tim_countermode = tim_countermode_up; /设置时钟为向上计数模式 tim_timebaseinit(tim4, &tim_timebasestructure); /* pwm1 mode configuration: channel1 */ tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm1; /配置为pwm1模式 tim_ocinitstructure.tim_outputstate = tim_outputstate_enable; tim_ocinitstructure.tim_pulse = ccr1_val; /设置通道1的电平跳变值,当计数值到达该值时电平发生跳变 tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high; /当定时器计数值小于ccr1_val时为高电平 tim_oc1init(tim4, &tim_ocinitstructure); /使能通道1 tim_oc1preloadconfig(tim4, tim_ocpreload_enable); /* pwm1 mode configuration: channel2 */ tim_ocinitstructure.tim_outputstate = tim_outputstate_enable; tim_ocinitstructure.tim_pulse = ccr2_val; /设置通道2的电平跳变值 tim_oc2init(tim4, &tim_ocinitstructure); /使能通道2 tim_oc2preloadconfig(tim4, tim_ocpreload_enable); /* pwm1 mode configuration: channel3 */ tim_ocinitstructure.tim_outputstate = tim_outputstate_enable; tim_ocinitstructure.tim_pulse = ccr3_val;/设置通道4的电平跳变值 tim_oc3init(tim4, &tim_ocinitstructure); /使能通道3 tim_oc3preloadconfig(tim4, tim_ocpreload_enable); /* pwm1 mode configuration: channel4 */ tim_ocinitstructure.tim_outputstate = tim_outputstate_enable; tim_ocinitstructure.tim_pulse = ccr4_val;/设置通道4的电平跳变值 tim_oc4init(tim4, &tim_ocinitstructure);/使能通道4 tim_oc4preloadconfig(tim4, tim_ocpreload_enable); tim_arrpreloadconfig(tim4, enable); / 使能定时器4重装载寄存器tim_cmd(tim4, enable); /使能定时器4void tim_setcompare2(tim_typedef* timx, uint16_t compare2)改变占空比 /* check the parameters */ assert_param(is_tim_list6_periph(timx); /* set the capture compare2 register value */ timx-ccr2 = compare2;2.33 sim900a驱动程序驱动sim900a的方法是通过单片机的串口通信以at命令的形式来控制sim900a。因此需要先配置串口。在本次制作中,我们使用单片机的串口2作为控制端,串口1则用于其他通信。串口2配置初始化函数void usart2_config(void)gpio_inittypedef gpio_initstructure;usart_inittypedef usart_initstructure;/* config usart2 clock */rcc_apb2periphclockcmd(rcc_apb2periph_gpioa, enable);rcc_apb1periphclockcmd(rcc_apb1periph_usart2, enable);/* usart2 gpio config */ /* configure usart2 tx (pa.02) as alternate function push-pull */ gpio_initstructure.gpio_pin = gpio_pin_2; gpio_initstructure.gpio_mode = gpio_mode_af_pp; gpio_initstructure.gpio_speed = gpio_speed_50mhz; gpio_init(gpioa, &gpio_initstructure); /* configure usart2 rx (pa.03) as input floating */ gpio_initstructure.gpio_pin = gpio_pin_3; gpio_initstructure.gpio_mode = gpio_mode_in_floating; gpio_init(gpioa, &gpio_initstructure);/* usart2 mode config */usart_initstructure.usart_baudrate = 115200;usart_initstructure.usart_wordlength = usart_wordlength_8b;usart_initstructure.usart_stopbits = usart_stopbits_1;usart_initstructure.usart_parity = usart_parity_no ;usart_initstructure.usart_hardwareflowcontrol = usart_hardwareflowcontrol_none;usart_initstructure.usart_mode = usart_mode_rx | usart_mode_tx;usart_init(usart2, &usart_initstructure); /*配置中断优先级 */nvic_configuration();/*配置串口2接收中断 */usart_itconfig(usart2, usart_it_rxne, enable);usart_cmd(usart2, enable);发送短信at命令子函数void sim900a_sms(char *num,char *smstext) char end2 = 0x1a,0x00;sim900a_clean_rx(); /清除接收缓存sim900a_tx_printf(at+cscs=gsmr); /“gsm”字符集sim900a_delay(100);sim900a_tx_printf(at+cmgf=1r); /文本模式sim900a_delay(100);sim900a_tx_printf(at+cmgs=%sr,num); /电话号码sim900a_delay(100);sim900a_tx_printf(%s,smstext); /短信内容sim900a_tx_printf(%s,end);2.34 nrf24l01驱动程序在本次制作中,用到两块nrf24l01模块,其中一个作为主机,一个作为从机使用由于程序过于复杂,这里只提供spi初始化程序。void spi_nrf_init(void) spi_inittypedef spi_initstructure; gpio_inittypedef gpio_initstructure; /*开启相应的io口时钟*/rcc_apb2periphclockcmd(rcc_apb2periph_gpioa|rcc_apb2periph_gpioc,enable); /*使能spi1时钟*/ rcc_apb2periphclockcmd(rcc_apb2periph_spi1, enable); /*配置spi1的sck,miso,mosi引脚为gpioa5,gpioa6,gpioa7 */ gpio_initstructure.gpio_pin = gpio_pin_5|gpio_pin_6|gpio_pin_7; gpio_initstructure.gpio_speed = gpio_speed_10mhz; gpio_initstructure.gpio_mode = gpio_mode_af_pp; /复用推挽输出 gpio_init(gpioa, &gpio_initstructure); /*配置spi1的ce引脚为gpioa4*/ gpio_initstructure.gpio_pin = gpio_pin_4; gpio_initstructure.gpio_speed = gpio_speed_10mhz; gpio_initstructure.gpio_mode = gpio_mode_out_pp; gpio_init(gpioa, &gpio_initstructure); /*配置spi1的csn引脚为gpioc4*/ gpio_initstructure.gpio_pin = gpio_pin_4; gpio_initstructure.gpio_speed = gpio_speed_10mhz; gpio_initstructure.gpio_mode = gpio_mode_out_pp; gpio_init(gpioc, &gpio_initstructure); /*配置spi1的irq引脚为gpioc5*/ gpio_initstructure.gpio_pin = gpio_pin_5; gpio_initstructure.gpio_speed = gpio_speed_10mhz; gpio_initstructure.gpio_mode = gpio_mode_ipu ; / gpio_init(gpioc, &gpio_initstructure); /* 拉高csn令nrf进入等待状态*/ nrf_csn_high(); spi_initstructure.spi_direction = spi_direction_2lines_fullduplex; /双线全双工 spi_initstructure.spi_mode = spi_mode_master; /主模式 spi_initstructure.sp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国乳酸行业投资价值研究报告
- 2025年中国朝天辣椒粉市场调查研究报告
- 2025年中国数码仪表市场调查研究报告
- 襄阳科技职业学院《信息可视化》2023-2024学年第二学期期末试卷
- 肇庆市实验中学高中生物:伴性遗传第课时的集体备课教案模版
- 2025至2031年中国继电耦合型接线端子排行业投资前景及策略咨询研究报告
- 新疆体育职业技术学院《汽车专业英语》2023-2024学年第二学期期末试卷
- 2025-2030年中国ORC发电行业发展深度测评及投资可行性预测研究报告
- 新疆医科大学《英语视听二》2023-2024学年第二学期期末试卷
- 信阳艺术职业学院《职业定位发展》2023-2024学年第一学期期末试卷
- 综合管理部门车辆安全生产职责模版(2篇)
- 《西游记》讲解学习
- DB33 766-2015 工业气体空分产品单位综合电耗限额及计算方法
- 办公楼拆除施工方案
- 江苏省苏州市(2024年-2025年小学六年级语文)部编版小升初真题(下学期)试卷及答案
- 职业技能鉴定培训方案
- 电力系统继电保护课后习题解析(第二版)-张保会-尹项根主编
- 《针刺伤预防与处理》团体标准解读与实践 课件
- 手铐的课件教学课件
- 体育场馆消防设施提升施工方案
- 【工程法规】王欣 教材精讲班课件 40-第6章-6.5-施工生产安全事故的应急救援和调查处理-6.6-政府主管部门安全生产监督管理
评论
0/150
提交评论