目 录摘 要 1关键词 11 前言 12 建立播种量、速度与转速的数学模型 23 智能播种机控制系统整体方案 43.1 智能播种机控制系统的整体思路 43.2 智能播种控制系统方框图 43.3 单片机的选择与概述 53.3.1 单片机的选择 53.3.2 ATmega128单片机结构与性能特点 54 智能播种机控制系统模块概述及原理 74.1 单片机系统模块 74.1.1 单片机电源模块 74.1.2 ATmega128单片机最小系统模块 84.2 JTAG通讯模块 94.3 播量信息输入模块 104.3.1 键盘输入播量 104.3.2 智能播量的控制 104.4 机具前进速度采样模块 104.4.1 传感器的选择 104.4.2 增量式旋转编码盘原理 114.4.3 机具前进速度采集电路 114.4.4 光电编码盘测速方法 124.5 检测播种量模块 134.5.1 传感器的分析及选择 134.5.2 光纤传感器的结构原理 144.5.3 传感器的电路原理图 144.5.4 传感器的安装 154.5.5 油菜籽粒检测方法 164.5.6 模糊算法 164.5.7 籽粒数转化成播量的算法 174.6 液晶显示模块 175 执行机构的确定 185.1执行机构类型 185.1.1可用执行机构 185.1.2 执行机构的选取 185.2 伺服系统介绍 195.2.1 伺服电机工作原理 195.2.2伺服器 206 整体系统原理图 217 智能播种机控制系统程序设计 217.1 程序设计的目标 217.2 系统软件开发工具 217.2.1 C语言 217.2.2 程序编程工具IAREW 227.3 程序开发流程介绍 227.3.1 系统主程序流程 227.3.2 系统的子程序流程 237.3.3 检测机具前进速度子程序 237.3.4 播量检测子程序 237.3.5 电机转速控制子程序 237.3.5 LCD1602子程序 237.4 小结 238 总结 24参考文献 24致 谢 25附录 256 整体系统原理图通过以上对系统的整体分析以及各个部分的硬件设计总结出系统的整个硬件电路原理图根据硬件电路原理图对电路板进行印刷并进行相关元器件的连接最终得到控制系统的控制板。原理图见附录。7 智能播种机控制系统程序设计7.1 程序设计的目标所设计的控制系统要实现以下功能1ATmega128单片机各端口和定时/计数器的初始化21602LCD液晶显示屏初始化和相关参数的输入3ATmega128单片机根据增量编码传感器采集到的脉冲计算出机具前进速度4ATmega128单片机根据播量计算公式以及输入的播量值、采集的机具前进速度值计算出电机的转速5ATmega128单片机根据计算出的电机转速以PWM形式调速伺服系统6光纤传感器能够检测排出油菜的籽粒数并计算出相应的播量与输入的播量相比较并重新调整电机转速。7.2 系统软件开发工具ATmega128单片机进行编程要选择编程软件和程序语言。7.2.1 C语言目前支持单片机应用系统开发的语言一般有汇编语言和高级语言。由于汇编语言是一种层次非常低的语言它仅仅高于直接手工编写二进制的机器指令码编写的代码非常难懂、不好维护、开发效率很低、时间长且单调本文转载自http://www.biyezuopin.vip/onews.asp?id14409不适合本设计的程序开发。C语言是一种面向过程的计算机程序设计语言易懂易学、简洁紧凑、灵活方便、运算符丰富、数据类型丰富因此采用C语言作为程序设计语言。7.2.2 程序编程工具IAREW嵌入式IAREW是一个非常有效的程序开发工具适用于大量8位、16位以及32位的处理器和微控制器因此在对项目进行开发时能在所熟悉的环境中进行它包含有高度优化的IARAVRC/C编译器、AVRIAR汇编器、工程管理器、高级语言调试器等可用工具提供了一个成功工程所需的所有工具因此使用时非常简单、方便另外它可以输出多种格式用户在其它软件上进行调试和下载都非常方便嵌入式IAREW不但代码编译效率比GCC和ICC高很多而且下载仿真都十分方便因此得到相关研究者的广泛应用。#includeiom128.h/*******************头文件定义****************/#includeintrinsics.h#includecomp_a90.h#includemath.h#includeLCD1602.H#includekey.h/*******************宏定义********************/#defineSPACE10//采样10次/*****************全局变量定义****************/unsignedcharPeriod_Base0,Count0,Pulse_Count0,flag0x00;unsignedlongSum_Pulse0,Sum_Time0;unsignedlongPeriod_Value[3]{0,0,0};unsignedlongPulse_Period_Value[SPACE]{0};unsignedintNumber0;unsignedlongAverage_Value0;/*****************函数定义********************/voidport_init(void)//I/O口配置函数{PORTA0x00;DDRA0x00;PORTB0x00;DDRB0x30;PORTC0x00;DDRC0x00;PORTD0x00;DDRD0x00;}voidtimer0_init(void){TCCR00x00;//stopASSR0x00;//set async modeTCNT00xD7;//set countOCR00x7d;//值0x7d为1KHZ; 值0x29为3KHZTCCR00x00;//0x1A start timer; 0x00 stop timer}voidtimer1_init(void)//定时器1输入捕获中断配置函数{TCCR1B0x00;TCNT1H0x00;TCNT1L0x00;OCR1AH0x03;OCR1AL0xE8;OCR1BH0x03;OCR1BL0xE8;ICR1H0x03;ICR1L0xE8;TCCR1A0x00;//TCCR1B 0xC0;//初始化为上升沿}voidinit_devices(void)//系统初始化函数系统时钟为2Mhz{_CLI();port_init();timer0_init();timer1_init();LCD1602_Initial();key_initail();MCUCR0x00;TIMSK0x24;_SEI();}voidmain(void)//主函数{externfloatV_Value;//机具前进速度externfloatH_Value;//实际输出播量unsignedchari0,j0;unsignedlongtemp0;init_devices();//初始化系统write_string(0,0, *Rapeseed-Sys* );write_string(0,1, Initializing.. );delay_nms(200);write_string(0,0,V:----m/sQ:----g);write_string(0,1,n:----r/mH:----g);while(1)//等待{key_scanf();if((flag0x01)0x01)//油菜籽采样数据处理算法{_CLI();//禁用中断flag0x00;Pulse_Count0;for(j0;jSPACE-1;j)//冒泡排序{for(i0;iSPACE-1-j;i){if(Pulse_Period_Value[i]Pulse_Period_Value[i1]){tempPulse_Period_Value[i];Pulse_Period_Value[i]Pulse_Period_Value[i1];Pulse_Period_Value[i1]temp;}}}for(j1;jSPACE-1;j)//去掉最大值和最小值{tempPulse_Period_Value[j];}temp/(SPACE-2);//求平均值for(j0;jSPACE;j)//计算油菜籽总个数{if(tempPulse_Period_Value[j]){Number;}elseif(tempPulse_Period_Value[j]2*temp/3Pulse_Period_Value[j]){Number;}elseif(2*temp/3Pulse_Period_Value[j]5*temp/2Pulse_Period_Value[j]){Number2;}elseif(5*temp/2Pulse_Period_Value[j]7*temp/2Pulse_Period_Value[j]){Number3;}}Average_ValueNumber*2000000/Sum_Time;//计算实际油菜籽每秒的实际输出量Number0;//总粒清零Sum_Time0;//总时间清零TIMSK0x24;_SEI();//打开中断H_Value12*Average_Value/V_Value;//实际采样数据Separate_IntData((unsignedint)H_Value,0xCB,4);//显示实际采样数据}}}