1,这个是51单片机寻迹小车程序的一部分像是用软件模拟PWM输出

第一个子函数:选择定时器工作方式,th1 tl1装入初值 ,打开总中断,打开定时器1中断,启动定时器1
用定时器

这个是51单片机寻迹小车程序的一部分像是用软件模拟PWM输出

2,循迹小车中用51单片机产生pwm控制小电机 pwm频率最好的范围是多少呢 占

在50%左右都是可以的,

循迹小车中用51单片机产生pwm控制小电机 pwm频率最好的范围是多少呢 占

3,循迹小车里的PWM是什么啊是怎么用来控制速度的

pwm波是可以调节占空比的矩形波,将输出pwm波得引脚连接到驱动马达的芯片的使能端,就可以实现对马达转速的控制,当用马达来带动小车的时候,即可以用来调节小车的速度!
要两路pwm,且左右轮的有转速差才可以转弯的

循迹小车里的PWM是什么啊是怎么用来控制速度的

4,循迹小车里的PWM是什么啊是怎么用来控制速度的

pwm波是可以调节占空比的矩形波,将输出pwm波得引脚连接到驱动马达的芯片的使能端,就可以实现对马达转速的控制,当用马达来带动小车的时候,即可以用来调节小车的速度!

5,STC89C52单片机循迹小车程序问题

PWM1和PWM2还有PWMC1在定义时在=号两边有隐字符,导致定义失败。bit RunFlag如果不可以用,可以将bit改成char试试。 由程序分析PWM1和PWM2不是直接控制电机的,它们可以输出脉宽调制信号,由定时器T0和T1控制脉宽,如果有电路图会分析准确一点。

6,智能小车pwm周期与频率取多少合适

不需要单独的 PWM模块,仅靠单片机和电机驱动(L298N)足够了。具体是在程序中用单片机的IO口模拟出PWM信号来,也就是控制IO口输出的高低电平的时间,利用不同时间实现不同占空比,继而控制驱动电路,改变电机的转速。

7,arduino做循迹智能小车的问题

楼主这活我也玩过。1、对于传感器不听话,很大可能是你的检测阈值设置得不是很好。2、一般来说你的传感器个数应该比较多,可能6~10个吧,如此多的信号不应该都进入中断,再说单片机也没那么多外部中断可给你用,建议所有信号加或门进入外部中断(可分为左边一组,右边一组,两个中断)。否则在主函数(更好的是,定时器)判断,这个信号最好连接到同一个端口上,如P0端口,通过位判断当前信号值。3、L298N功率芯片,如果要调速且是直流电机,一般是对其控制使能脚施加占空比变化的信号,以达到不同的驱动效果。如果是步进电机,则控制方式有所不同,请查阅相应文献。

8,寻迹感光智能车使用手册

摘要 基于HCSl2单片机设计一种智能车系统。在该系统中,由红外光电传感器实现路径识别,通过对小车速度的控制,使小车能按照任意给定的黑色引导线平稳地寻迹。实验证明:系统能很好地满足智能车对路径识别性能和抗干扰能力的要求,速度调节响应时间快,稳态误差小,具有较好的动态性能和良好的鲁棒性。关键词 智能车 HCSl2单...  摘要 基于HCSl2单片机设计一种智能车系统。在该系统中,由红外光电传感器实现路径识别,通过对小车速度的控制,使小车能按照任意给定的黑色引导线平稳地寻迹。实验证明:系统能很好地满足智能车对路径识别性能和抗干扰能力的要求,速度调节响应时间快,稳态误差小,具有较好的动态性能和良好的鲁棒性。  关键词 智能车 HCSl2单片机 红外光电传感器  智能车系统以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科;主要由路径识别、角度控制及车速控制等功能模块组成。一般而言,智能车系统要求小车在白色的场地上,通过控制小车的转向角和车速,使小车能自动地沿着一条任意给定的黑色带状引导线行驶。  笔者基于HCSl2单片机设计了一种智能车系统。硬件系统中的路径识别功能由红外光电传感器实现,车速控制由模糊控制器进行调节。软件设计中实时检测路况,并定时中断采集速度反馈值。  1 系统分析及控制方案  1.1 智能车系统分析  智能车系统根据检测到的路况和车速的当前信息,控制转向舵机和直流驱动电机,相应地调整小车的行驶方向和速度;最终的目的使智能车能快速、稳定地按给定的黑色引导线行驶。  小车在行驶过程中会遇到以下两种路况:①当小车由直道高速进入弯道时,转角方向和车速应根据弯道的曲率迅速做出相应的改变,原则是弯道曲率越大则方向变化角度越大,车速越低。②当小车遇到_卜字交叉路段或是脱离轨迹等特殊情况时,智能车应当保持与上次正常情况一致的方向行驶,速度则相应降低。因此,对智能车的设计,要求具有实时路径检测功能和良好的调速功能。  1.2 控制方案的设计  系统的控制分为小车转向角控制和速度控制两部分。  小车转向角的控制通过输入PWM信号进行开环控制。根据检测的不同路径,判断出小车所在位置,按不同的区间给出不同的舵机PWM控制信号。小车转过相应的角度。考虑到实际舵机的转向角与所给PWM信号的占空比基本成线性关系,所以舵机的控制方案采用查表法。在程序中预先创建控制表,路径识别单元检测当前的路况,单片机通过查表可知当前的赛道,然后给出相应的PWM信号控制舵机转向。  本设计采用了一种数自整定的模糊控制算法对小车速度进行闭环控制。小车在前进过程中,根据不同的路况给出不同的速度给定值,通过模糊控制器进行速度调节,以缩短小车的速度控制响应时间,减小稳态误差。系统将小车的角度变化率反馈给模糊控制器,通过修正规则进行模糊参数的自整定。智能车自动控制系统结构框图如图1所示,图中dt表示小车角度的微分环节,θ表示输出的转角,n表示速度的设定值,n表示实际速度反馈值。  2 硬件结构与方案设计  系统硬件主要由HCSl2控制核心、电源管理单元、路径识别单元、角度控制单元和车速控制单元组成,其结构框图如图2所示。  2.1 HCSl2控制核心  系统的核心控制采用飞思卡尔半导体公司的16位HCSl2系列单片机MC9S12DGl28。其主要特点是高度的功能集成,易于扩展,低电压检测复位功能,看门狗计数器,低电压低功耗,自带PWM输出功能等。系统I/O口具体分配如下:PORTAO、PTH0~PTH7共9位用于小车前面路径识别的输入口;PACNO用于车速检测的输入口;PORTB0~PORTB7用于显示小车的各种性能参数;PWM01用于伺服舵机的PWM控制信号输出;PWM23、PWM45用于驱动电机的PWM控制信号输出。  2.2 电源管理单元  电源管理单元是系统硬件设计中的一个重要组成单元。本系统采用7.2V、2000mAh、Ni-Cd蓄电池供电。为满足系统各单元正常工作的需要,系统将电压值分为5V、6.5V和7.2V三个档。三个电压档的具体实现及其功能如下:  ①采用稳压管芯片L7805CV将电源电压稳压到5V,稳压电路如图3所示,给单片机系统电路、路径识别的光电传感器电路、车速检测的旋转编码器电路和驱动芯片MC33886电路供电;  ②将电源电压7.2V经过一个二极管降至6.5V左右后给舵机供电;  ③将电源电压7.2V直接供给直流驱动电机。  2.3 路径识别单元  为提高小车转向角的控制精度,系统路径识别单元采用9个发射和接收一体的反射式红外光电传感器JY043作为路径检测元件。红外线具有极强的反射能力,应用广泛,采用专用的红外发射管和接收管可以有效地防止周围可见光的干扰,提高系统的抗干扰能力。  对于小车循迹场地的黑白两种颜色,发射管发出同样的光强,接收管接收到的光强不同,因此输出的电压值也不同;给定一个基准电压,通过对不同输出电压值进行比较,则电路的输出为高低电平。当检测到黑自线时分别输出为高低电平,样不仅系统硬件电路简单,而且信号处理速度快。其路径检测硬件电路如图4所示。  2.4 角度控制单元  系统角度控制单元采用Sanwa公司SRM-102型舵机作为小车方向控制元件。在实际运行过程中,舵机的输出转角与给定的PWM信号值成线性关系,以PWM信号为系统输入信号,实现舵机开环控制。舵机响应曲线和控制电路如图5、图6所示。由于舵机的开环转向力矩足够,单片机通过采集的当前路况,给定PWM控制信号,从而实现舵机的转向,具体的舵机转向角与路径识别单元输出值的关系如表1所列。  2.5 车速控制单元  车速控制单元采用RS-380SH型直流电机对小车速度进行闭环控制,并用MC33886电机驱动H-桥芯片作为电机的驱动元件。车速检测元件则采用日本Nemaicon公司的E40S-600-3-3型旋转编码器,其精度达到车轮每旋转一周,旋转编码器产生600个脉冲。  系统通过MC9S12DGl28输出的PWM信号来控制直流驱动电机。考虑到智能车由直道高速进入弯道时需要急速降速。通过实验证明:当采用MC33886的半桥驱动时,在小车需要减速时只能通过自由停车实现。当小车速度值由80降至50时(取旋转编码器在一定采样时间内检测到的脉冲数作为系统速度的量纲),响应时间约为0.3s,调节效果不佳;当采用MC33886的全桥驱动时,其响应时间约为0.1s。因此系统利用MC33886的全桥结构,实现了小车的快速制动。其电机驱动电路如图7所示。VCC为电源电压7.2V,INl和IN2分别为MC33886的PWM信号输入端口。MC33886的输出端口OUTl和OUT2分别接驱动电机的两端。Dl、D2为芯片的使能端。  3 软件流程设计  本智能车系统的软件设计基于MetrowerksCodeWarrlor CWl2 V3.1编程环境,使用C语言实现。整个系统软件开发、制作、安装、调试都在此环境下实现。  系统软件设计由以下几个模块组成:单片机初始化模块,实时路径检测模块,舵机控制模块,驱动电机控制模块,中断速度采集模块和速度模糊控制模块。系统软件流程如图8所示。  4 实 验  对小车循迹功能实验是通过控制舵机的转向角实现的,而对车速控制功能,则进行了传统模糊控制与参数自整定模糊控制的对比实验。  (1)小车循迹功能实验  系统通过采集到当前路况,对舵机的转向角进行控制米实现小车的循迹功能。在舵机工作电压6.5V情况下,输入的PWM信号与舵机输出的转角一一对应。实验测得,舵机角度从左转-45°至右转45°对应的输入PWM信号范围为131~165。具体的舵机转角与PWM对应关系如表2所列,实验测得小车运行轨迹平滑,循迹图如图9所示。图中细线为任意给定的黑色引导线,粗线为小车循迹所行驶的曲线。  (2)小车速度控制功能实验  在小车给定的三档速度情况下,对小车速度进行传统模糊控制与参数自整定的对比实验。具体车速控制曲线如图10所示。图中纵轴为采样周期(T=O.0ls)的车速检测元件检测到的脉冲数,横轴为采样周期的整倍数。曲线1为速度设定值,曲线2为传统模糊控制响应曲线,曲线3为采用参数自整定模糊控制响应曲线。由小车的速度控制曲线可知,采用传统模糊控制用于智能车系统时,响应时间太,且调节过程中会产生较大幅度的振荡;当采用带参数自整定的模糊控制算法后,小车在减速时能在较小的振幅范围内快速调节到设定值,从而保证了小车的平稳过渡且不影响整体速度。  5 结论  通过对小车进行转向角度和车速控制实验证明:小车能平稳地按照任意给定的黑色引导线行驶,循迹效果良好,速度控制响应快,动态性能良好,稳态误差较小,系统的稳定性和抗干扰能力强。

9,L7805CV的输入电压是多少

220V
摘要 基于hcsl2单片机设计一种智能车系统。在该系统中,由红外光电传感器实现路径识别,通过对小车速度的控制,使小车能按照任意给定的黑色引导线平稳地寻迹。实验证明:系统能很好地满足智能车对路径识别性能和抗干扰能力的要求,速度调节响应时间快,稳态误差小,具有较好的动态性能和良好的鲁棒性。关键词 智能车 hcsl2单... 摘要 基于hcsl2单片机设计一种智能车系统。在该系统中,由红外光电传感器实现路径识别,通过对小车速度的控制,使小车能按照任意给定的黑色引导线平稳地寻迹。实验证明:系统能很好地满足智能车对路径识别性能和抗干扰能力的要求,速度调节响应时间快,稳态误差小,具有较好的动态性能和良好的鲁棒性。关键词 智能车 hcsl2单片机 红外光电传感器 智能车系统以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科;主要由路径识别、角度控制及车速控制等功能模块组成。一般而言,智能车系统要求小车在白色的场地上,通过控制小车的转向角和车速,使小车能自动地沿着一条任意给定的黑色带状引导线行驶。 笔者基于hcsl2单片机设计了一种智能车系统。硬件系统中的路径识别功能由红外光电传感器实现,车速控制由模糊控制器进行调节。软件设计中实时检测路况,并定时中断采集速度反馈值。 1 系统分析及控制方案 1.1 智能车系统分析 智能车系统根据检测到的路况和车速的当前信息,控制转向舵机和直流驱动电机,相应地调整小车的行驶方向和速度;最终的目的使智能车能快速、稳定地按给定的黑色引导线行驶。 小车在行驶过程中会遇到以下两种路况:①当小车由直道高速进入弯道时,转角方向和车速应根据弯道的曲率迅速做出相应的改变,原则是弯道曲率越大则方向变化角度越大,车速越低。②当小车遇到_卜字交叉路段或是脱离轨迹等特殊情况时,智能车应当保持与上次正常情况一致的方向行驶,速度则相应降低。因此,对智能车的设计,要求具有实时路径检测功能和良好的调速功能。 1.2 控制方案的设计 系统的控制分为小车转向角控制和速度控制两部分。 小车转向角的控制通过输入pwm信号进行开环控制。根据检测的不同路径,判断出小车所在位置,按不同的区间给出不同的舵机pwm控制信号。小车转过相应的角度。考虑到实际舵机的转向角与所给pwm信号的占空比基本成线性关系,所以舵机的控制方案采用查表法。在程序中预先创建控制表,路径识别单元检测当前的路况,单片机通过查表可知当前的赛道,然后给出相应的pwm信号控制舵机转向。 本设计采用了一种数自整定的模糊控制算法对小车速度进行闭环控制。小车在前进过程中,根据不同的路况给出不同的速度给定值,通过模糊控制器进行速度调节,以缩短小车的速度控制响应时间,减小稳态误差。系统将小车的角度变化率反馈给模糊控制器,通过修正规则进行模糊参数的自整定。智能车自动控制系统结构框图如图1所示,图中dt表示小车角度的微分环节,θ表示输出的转角,n表示速度的设定值,n表示实际速度反馈值。 2 硬件结构与方案设计 系统硬件主要由hcsl2控制核心、电源管理单元、路径识别单元、角度控制单元和车速控制单元组成,其结构框图如图2所示。 2.1 hcsl2控制核心 系统的核心控制采用飞思卡尔半导体公司的16位hcsl2系列单片机mc9s12dgl28。其主要特点是高度的功能集成,易于扩展,低电压检测复位功能,看门狗计数器,低电压低功耗,自带pwm输出功能等。系统i/o口具体分配如下:portao、pth0~pth7共9位用于小车前面路径识别的输入口;pacno用于车速检测的输入口;portb0~portb7用于显示小车的各种性能参数;pwm01用于伺服舵机的pwm控制信号输出;pwm23、pwm45用于驱动电机的pwm控制信号输出。 2.2 电源管理单元 电源管理单元是系统硬件设计中的一个重要组成单元。本系统采用7.2v、2000mah、ni-cd蓄电池供电。为满足系统各单元正常工作的需要,系统将电压值分为5v、6.5v和7.2v三个档。三个电压档的具体实现及其功能如下: ①采用稳压管芯片l7805cv将电源电压稳压到5v,稳压电路如图3所示,给单片机系统电路、路径识别的光电传感器电路、车速检测的旋转编码器电路和驱动芯片mc33886电路供电; ②将电源电压7.2v经过一个二极管降至6.5v左右后给舵机供电; ③将电源电压7.2v直接供给直流驱动电机。 2.3 路径识别单元 为提高小车转向角的控制精度,系统路径识别单元采用9个发射和接收一体的反射式红外光电传感器jy043作为路径检测元件。红外线具有极强的反射能力,应用广泛,采用专用的红外发射管和接收管可以有效地防止周围可见光的干扰,提高系统的抗干扰能力。 对于小车循迹场地的黑白两种颜色,发射管发出同样的光强,接收管接收到的光强不同,因此输出的电压值也不同;给定一个基准电压,通过对不同输出电压值进行比较,则电路的输出为高低电平。当检测到黑自线时分别输出为高低电平,样不仅系统硬件电路简单,而且信号处理速度快。其路径检测硬件电路如图4所示。 2.4 角度控制单元 系统角度控制单元采用sanwa公司srm-102型舵机作为小车方向控制元件。在实际运行过程中,舵机的输出转角与给定的pwm信号值成线性关系,以pwm信号为系统输入信号,实现舵机开环控制。舵机响应曲线和控制电路如图5、图6所示。由于舵机的开环转向力矩足够,单片机通过采集的当前路况,给定pwm控制信号,从而实现舵机的转向,具体的舵机转向角与路径识别单元输出值的关系如表1所列。 2.5 车速控制单元 车速控制单元采用rs-380sh型直流电机对小车速度进行闭环控制,并用mc33886电机驱动h-桥芯片作为电机的驱动元件。车速检测元件则采用日本nemaicon公司的e40s-600-3-3型旋转编码器,其精度达到车轮每旋转一周,旋转编码器产生600个脉冲。 系统通过mc9s12dgl28输出的pwm信号来控制直流驱动电机。考虑到智能车由直道高速进入弯道时需要急速降速。通过实验证明:当采用mc33886的半桥驱动时,在小车需要减速时只能通过自由停车实现。当小车速度值由80降至50时(取旋转编码器在一定采样时间内检测到的脉冲数作为系统速度的量纲),响应时间约为0.3s,调节效果不佳;当采用mc33886的全桥驱动时,其响应时间约为0.1s。因此系统利用mc33886的全桥结构,实现了小车的快速制动。其电机驱动电路如图7所示。vcc为电源电压7.2v,inl和in2分别为mc33886的pwm信号输入端口。mc33886的输出端口outl和out2分别接驱动电机的两端。dl、d2为芯片的使能端。 3 软件流程设计 本智能车系统的软件设计基于metrowerkscodewarrlor cwl2 v3.1编程环境,使用c语言实现。整个系统软件开发、制作、安装、调试都在此环境下实现。 系统软件设计由以下几个模块组成:单片机初始化模块,实时路径检测模块,舵机控制模块,驱动电机控制模块,中断速度采集模块和速度模糊控制模块。系统软件流程如图8所示。 4 实 验 对小车循迹功能实验是通过控制舵机的转向角实现的,而对车速控制功能,则进行了传统模糊控制与参数自整定模糊控制的对比实验。 (1)小车循迹功能实验 系统通过采集到当前路况,对舵机的转向角进行控制米实现小车的循迹功能。在舵机工作电压6.5v情况下,输入的pwm信号与舵机输出的转角一一对应。实验测得,舵机角度从左转-45°至右转45°对应的输入pwm信号范围为131~165。具体的舵机转角与pwm对应关系如表2所列,实验测得小车运行轨迹平滑,循迹图如图9所示。图中细线为任意给定的黑色引导线,粗线为小车循迹所行驶的曲线。 (2)小车速度控制功能实验 在小车给定的三档速度情况下,对小车速度进行传统模糊控制与参数自整定的对比实验。具体车速控制曲线如图10所示。图中纵轴为采样周期(t=o.0ls)的车速检测元件检测到的脉冲数,横轴为采样周期的整倍数。曲线1为速度设定值,曲线2为传统模糊控制响应曲线,曲线3为采用参数自整定模糊控制响应曲线。由小车的速度控制曲线可知,采用传统模糊控制用于智能车系统时,响应时间太,且调节过程中会产生较大幅度的振荡;当采用带参数自整定的模糊控制算法后,小车在减速时能在较小的振幅范围内快速调节到设定值,从而保证了小车的平稳过渡且不影响整体速度。 5 结论通过对小车进行转向角度和车速控制实验证明:小车能平稳地按照任意给定的黑色引导线行驶,循迹效果良好,速度控制响应快,动态性能良好,稳态误差较小,系统的稳定性和抗干扰能力强。 参考资料:http://www.51base.com/electron/adhibition/singlechip/2008031192377.shtml 1回答者: 不二一居 - 助理 三级 2008-4-1 10:21 我来评论>> 提问者对于答案的评价:谢谢 相关内容

10,跪求寻迹小车c程序 用89c51单片机控制的 用tcrt5000红外反射式光

你好!#include#include/*头文件*/ unsigned char zkbz=0 ; /*占空比*/ unsigned char zkby=0 ; unsigned char t=0; /* 定时器中断计数器 */ unsigned char a=0; bit flag=0; /*标志位检测一个pwm波是否结束*/ /******************************************************** 控制口定义 *********************************************************/ sbit pw1 =P3^0; sbit s1 =P3^1; sbit s2 =P3^2; sbit pw2 =P3^3; sbit s3 =P3^4; sbit s4 =P3^5; sbit Guangdian0=P2^0; sbit Guangdian1=P2^1; sbit Guangdian2=P2^2; sbit Guangdian3=P2^3; sbit Guangdian4=P2^4; sbit Guangdian5=P2^5; sbit Guangdian6=P2^6; sbit Guangdian7=P2^7; /************************************************************* 定时器0服务程序 *************************************************************/ void timer0() interrupt 1 /* T0中断服务程序 */ { if(t if(t t++ ; if(t>=100) t=0; /* 1个PWM信号由100次中断产生 */ } /************************************************************* 循迹程序 *************************************************************/ void xunji(void) { switch(a) { case 0x18: {flag=0;s1=1;s2=0;s3=1;s4=0;zkbz=30;zkby=45;break;} case 0x0c: {flag=0;s1=1;s2=0;s3=1;s4=0;zkbz=75;zkby=45;break;} case 0x30: {flag=0;s1=1;s2=0;s3=1;s4=0;zkbz=45;zkby=65;break; } case 0x06: {flag=0;s1=1;s2=0;s3=1;s4=0;zkbz=85;zkby=30;break;} case 0x60: {flag=0;s1=1;s2=0;s3=1;s4=0;zkbz=30;zkby=75;break;} case 0x03: {flag=0;s1=1;s2=0;s3=1;s4=0;zkbz=85;zkby=30;break;} case 0xc0: {flag=0;s1=1;s2=0;s3=1;s4=0;zkbz=30;zkby=85;break;} case 0x01: {flag=0;s1=1;s2=0;s3=0;s4=0;zkbz=60;zkby=30;break;} case 0x80: {flag=0;s1=0;s2=0;s3=1;s4=0;zkbz=30;zkby=60;break;} case 0xff: {flag=0;s1=0;s2=1;s3=0;s4=1;zkbz=0;zkby=0;break;} case 0x00: {flag=1;s1=1;s2=1;s3=1;s4=1;zkbz=30;zkby=30;break;} default:break; } } /************************************************************** 内部资源初始化 *******************************************************************/ void Init(void) { TMOD=0x12; /* 设定T0的工作模式为2,设定T0的工作模式为1 */ TH0=0xB6; /* 装入定时器的初值 */ //74us TL0=0xB6; IT0=1; IP=0x03; EA=1; /* 开总中断 */ ET0=1; /* 定时器0允许中断 */ TR0=1; /* 启动定时器0 */ EX0=1; /*开中断0*/ } void main(void) { Init(); /*系统初始化*/ zkbz=30; zkby=30; s1=1;s2=0;s3=1;s4=0; do{ P2=0XFF; /*循迹*/ a=P2; ; xunji(); }while(a!=0x0ff); } 打字不易,采纳哦!
#include<intrins.h>#include<reg51.h>/*头文件*/unsigned char zkbz=0 ; /*占空比*/unsigned char zkby=0 ;unsigned char t=0; /* 定时器中断计数器 */unsigned char a=0;bit flag=0; /*标志位检测一个pwm波是否结束*//******************************************************** 控制口定义*********************************************************/sbit pw1 =P3^0;sbit s1 =P3^1;sbit s2 =P3^2;sbit pw2 =P3^3;sbit s3 =P3^4;sbit s4 =P3^5;sbit Guangdian0=P2^0;sbit Guangdian1=P2^1;sbit Guangdian2=P2^2;sbit Guangdian3=P2^3;sbit Guangdian4=P2^4;sbit Guangdian5=P2^5;sbit Guangdian6=P2^6;sbit Guangdian7=P2^7;/************************************************************* 定时器0服务程序*************************************************************/void timer0() interrupt 1 /* T0中断服务程序 */ if(t<zkbz) pw1=1; else pw1=0; /* 产生电机1的PWM信号 */ if(t<zkby) pw2=1; else pw2=0;/* 产生电机1的PWM信号 */ t++ ; if(t>=100) t=0; /* 1个PWM信号由100次中断产生 */}/************************************************************* 循迹程序*************************************************************/void xunji(void) switch(a) case 0x18: case 0x0c: case 0x30: case 0x06: case 0x60: case 0x03: case 0xc0: case 0x01: case 0x80: case 0xff: case 0x00: default:break; } }/************************************************************** 内部资源初始化*******************************************************************/void Init(void) TMOD=0x12; /* 设定T0的工作模式为2,设定T0的工作模式为1 */ TH0=0xB6; /* 装入定时器的初值 */ //74us TL0=0xB6; IT0=1; IP=0x03; EA=1; /* 开总中断 */ ET0=1; /* 定时器0允许中断 */ TR0=1; /* 启动定时器0 */ EX0=1; /*开中断0*/ }void main(void) Init(); /*系统初始化*/ zkbz=30; zkby=30; s1=1;s2=0;s3=1;s4=0; do a=P2; ; xunji(); }while(a!=0x0ff); }
我用十三个对管,舵机控制转向,八个对管的话状态改下就行,给你参考下,不明白可以追问我,qq 181325995#include<reg52.h>#define uint unsigned int #define uchar unsigned charuint i,count;uchar pro; //*驱动电机调速*//uchar finish=0;//停车标志sbit le1=P1^0; //*左边传感器*//sbit le2=P1^1;sbit le3=P1^2;sbit le4=P1^3;sbit le5=P1^4;sbit le6=P1^5;sbit mid=P1^6;//*中间传感器*//sbit ri6=P1^7;sbit ri5=P2^3;sbit ri4=P2^4;sbit ri3=P2^5;sbit ri2=P2^6;sbit ri1=P2^7;//*右边传感器*//sbit ENA=P2^0; //驱动电机pwm//sbit moto1=P2^1; //电机控制//sbit moto2=P2^2;sbit PWM=P3^5; //舵机pwm//sbit bz=P3^7;//蔽障管init() TMOD=0x11;//设定双定时器 EA=1; TR0=1; TR1=1; TH0 = 0x0B1;//设定定时初始值,可去下载个定时器计算软件, TL0 = 0x0E0; TH1=(65536-100)/256; TL1=(65536-100)%256; ET0=1; ET1=1; ENA=1;}void delay(uint n)//延时函数 uchar a,b,c; for(c=1;c>0;c--) for(b=n;b>0;b--) for(a=2;a>0;a--);}void delay2(uint z) uchar a,b,c; for(a=2;a>0;a--) for(b=100;b>0;b--) for(c=z;c>0;c--);}void qctyp(void) //光电管全无状态时(脱离轨道),读取前次状态le1=P1^0; le2=P1^1;le3=P1^2;le4=P1^3;le5=P1^4;le6=P1^5;mid=P1^6;ri6=P1^7;ri5=P2^3;ri4=P2^4;ri3=P2^5;ri2=P2^6;ri1=P2^7;}void hhig(uint y)//前进函数 pro=y;//变量y是改变小车速度这里范围是0--39 moto1=1; moto2=0;}void back(uint z)//后退函数 pro=z;//改变z 可改变行驶速度 moto1=0; moto2=1;}void dj(uint m) //舵机控制 PWM=1; delay(m); //改变m可改变舵机转向角度, PWM=0; }void check_stop()//检测终点线,我用十三个对管,八个管停车状态自己分析 uchar start_flag; if((le3&&le4)&&(!le1&&!le6)&&mid&&(ri3&&ri4)&&(!ri1&&!ri6)) start_flag=1; else if((le2&&le3)&&!le5&&(le6&&mid)&&(ri3&&ri4)&&(ri1&&ri6)) start_flag=1; else if((le2&&le3)&&le6&&(!le5&&!mid)&&(ri3&&ri4)&&(ri1&&ri6)) start_flag=1; else if((le2&&le3)&&!le4&&(le5&&le6)&&!mid&&(ri5&&ri4)&&ri1) start_flag=1; else if((le2&&le3)&&(!le4&&!le6)&&le5&&!mid&&!ri4&&(ri1&&ri2)) start_flag=1; else if(le2&&!le3&&(le4&&mid)&&(le5&&le6)&&(ri1&&ri2)) start_flag=1; else if((le3&&le4)&&le6&&(ri6&&mid)&&(ri2&&ri3)&&!ri5) start_flag=1; else if((le5&&le4)&&(!le1&&!mid)&&ri6&&(ri2&&ri3)&&!ri5) start_flag=1; else if((le5&&le6)&&(!le1&&!le2)&&ri5&&ri2&&!ri4) start_flag=1; else if((le5&&le4)&&(!le1&&!le2)&&(!mid||!ri6)&&ri5&&(ri1&&ri2)&&!ri4) start_flag=1; else start_flag=0; if(start_flag) count++; delay2(50); if (count==1) else if(count==2) else if(count==3) count=0; finish=1; P0=0xa4;//加led显示只是为了方便调试,两圈之后停车 } else finish=0; } if(finish) ENA=0; TR1=0;//关定时器1,驱动电机停转 }}void xunji()//循迹函数,读取光电管状态 if(!le1&&!le2&&!le3&&!le4&&!le5&&!le6&&mid&&!ri6&&!ri5&&!ri4&&!ri3&&!ri2&&!ri1) dj(109); hhig(39); } else if(le6&&mid&&!ri6&&!ri5&&!ri4&&!ri3&&!ri2&&!ri1) dj(114); hhig(35); } 。 。 。//分析八个光电管状态,看你的电路检测到黑线输出1或者是0 else dj(109);//舵机归中 hhig(25); }}void main() init(); while(1) check_stop(); if(bz==0)//检测到障碍,。。。 back(18); } } }void timer0() interrupt 1//产生pwm信号控制舵机,周期20ms TH0=0xb1; TL0=0xe0;xunji();}void timer1() interrupt 3//产生pwm信号控制驱动电机速度 TH1=(65536-100)/256; TL1=(65536-100)%256; i++; if(i<=pro) ENA=1; } else ENA=0; } if(i==40) ENA=~ENA; i=0; }}
主要研究几个传感器与黑线的位置关系,然后对电机旋转做出调整,用点心,很快的

文章TAG:循迹小车的pwm值一般为多少循迹  小车  一般  
下一篇