用光敏光敏电阻控制led电路和步进电机的程序

STC89C52,步进电机,光敏电阻【51单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:59,639贴子:
STC89C52,步进电机,光敏电阻收藏
我用C语言在Keil4上写了一个用遥控器来控制步进电机,通过光明电阻模块来限制步进电机转动幅度的程序,单独让遥控器控制步进电机正反转,停止没有问题。单独让光敏电阻模块以波特率为9600来给出高低电平也没有问题,但现在我将这两个程序模块整合到一起之后,却出现了问题,要么就是遥控器控制步进电机正反转,停止没有问题,要么就是光敏电阻模块以波特率为9600来给出高低电平没有问题,要么就是都有问题,怀疑是两个定时器出现了干扰,但有不确定,真心不知该怎么办,下面是我给出的程序,求高手指点 #include &reg52.h&#define uchar unsigned char#define uint unsigned intsbit key1=P1^0;sbit key2=P1^7;signed long beats = 0;
//电机转动节拍总数unsigned char T0RH = 0;
//T0重载值的高字节unsigned char T0RL = 0;
//T0重载值的低字节unsigned char dir = 2; unsigned char light = 1; unsigned char sta = 0;extern unsigned char ircode[4];extern void InitInfrared();void delay(uint z);void Initial_com(void);void ConfigTimer0(unsigned int ms);void RightRunMotor();void LeftRunMotor();void StopRunMotor();unsigned char ReiverSta();void main(){
//开总中断
InitInfrared();
//初始化红外功能
ConfigTimer0(2);
//配置T0定时2ms ReiverSta(); Initial_com(); if(RI)
date=SBUF;
//单片机接受
//单片机发送
if(key2 == 0)
light = 1;
light = 0;
if (irflag)
//接收到红外数据时刷新显示
irflag = 0;
switch(sta)
StopRunMotor();
if(ircode[2] == 0x43)
RightRunMotor();
else if(ircode[2] == 0x40)
else if(ircode[2] == 0x44)
if(ircode[2] == 0x43)
RightRunMotor();
else if(ircode[2] == 0x40)
LeftRunMotor();
else if(ircode[2] == 0x44)
StopRunMotor();
if(ircode[2] == 0x43)
RightRunMotor();
else if(ircode[2] == 0x40)
LeftRunMotor();
else if(ircode[2] == 0x44)
StopRunMotor();
StopRunMotor();
if(ircode[2] == 0x43)
else if(ircode[2] == 0x40)
LeftRunMotor();
else if(ircode[2] == 0x44)
}}unsigned char ReiverSta(){ unsigned char i = 0; for(i=0; i&4; i++)
if((dir == 2) && (light == 1))
if((dir == 1) && (light == 0))
if((dir == 2) && (light == 0))
if((dir == 1) && (light == 1))
/* 步进电机启动函数,angle-需转过的角度 */void RightRunMotor(){
signed long angle = 360;
beats = (angle * 4076) / 360; //实测为4076拍转动一圈
ET0 = 1;}void LeftRunMotor(){
signed long angle = -360;
beats = (angle * 4076) / 360; //实测为4076拍转动一圈
ET0 = 1;}/* 步进电机停止函数 */void StopRunMotor(){
beats = 0;
ET0 = 1;}/*void delay(uint z){
for(i=z;i&0;i--)
for(j=110;j&0;j--);}void Initial_com(void){ EA=1;
//开总中断 ES=1;
//允许串口中断 ET1=1;
//允许定时器T1的中断 TMOD=0x20;
//定时器T1,在方式2中断产生波特率 PCON=0x00;
//SMOD=0 SCON=0x50;
// 方式1 由定时器控制 TH1=0
//波特率设置为9600 TL1=0 TR1=1;
//开定时器T1运行控制位}
*//* 电机转动控制函数 */void TurnMotor(){
//临时变量
static unsigned char index = 0;
//节拍输出索引
unsigned char code BeatCode[8] = {
//步进电机节拍对应的IO控制代码
0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6
if (beats != 0)
//节拍数不为0则产生一个驱动节拍
if (beats & 0)
//节拍数大于0时正转
//正转时节拍输出索引递增
index = index & 0x07;
//用&操作实现到8归零
//正转时节拍计数递减
//节拍数小于0时反转
//反转时节拍输出索引递减
index = index & 0x07;
//用&操作同样可以实现到-1时归7
//反转时节拍计数递增
//用tmp把P1口当前值暂存
tmp = tmp & 0xF0;
//用&操作清零低4位
tmp = tmp | BeatCode[index]; //用|操作把节拍代码写到低4位
//把低4位的节拍代码和高4位的原值送回P1
//节拍数为0则关闭电机所有的相
P1 = P1 | 0x0F;
}}/* 配置并启动T0,ms-T0定时时间 */void ConfigTimer0(unsigned int ms){
//临时变量
//定时器计数频率
tmp = (tmp * ms) / 1000;
//计算所需的计数值
tmp = 65536 -
//计算定时器重载值
tmp = tmp + 13;
//补偿中断响应延时造成的误差
T0RH = (unsigned char)(tmp&&8);
//定时器重载值拆分为高低字节
T0RL = (unsigned char)
TMOD &= 0xF0;
//清零T0的控制位
TMOD |= 0x01;
//配置T0为模式1
TH0 = T0RH;
//加载T0重载值
TL0 = T0RL;
//使能T0中断
//启动T0}/* T0中断服务函数,执行数码管扫描显示 */void InterruptTimer0() interrupt 1{
TH0 = T0RH;
//重新加载重载值
TL0 = T0RL;
TurnMotor(); //执行电机驱动}
登录百度帐号【图文】第6章 数字程序控制技术2(步进电机)_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
第6章 数字程序控制技术2(步进电机)
阅读已结束,下载本文到电脑
想免费下载本文?
登录百度文库,专享文档复制特权,积分每天免费拿!
你可能喜欢步进电机驱动器(用于太阳跟踪器)
我的图书馆
步进电机驱动器(用于太阳跟踪器)
下面这些电路主要用于太阳跟踪器的光敏检测及步进电机驱动。对于光敏检测部分,可以参阅上一篇文章中的LED光敏传感器电路进行更换,以达到不同的灵敏度。
双极步进电机驱动器基于CMOS 40106六个施密特触发器
维尔夫的描述。
步进控制器操作如下(我认为):
LED的光电检测器Q1和Q4与共同努力,使无论是两个独立的振荡器。 当LED与太阳对准,两个LED传感器会通过“影子面具”被遮蔽,Q1和Q4接通和两个振荡器被禁用。
(其实你不需要荫罩,两个晶体管将是是否没有光的LED或两个LED具有相同的照度。无论哪种方式,他们将会给整个LED对。Redrok零伏。)
当一个或另一个LED亮起,该晶体管被关断,振荡器被激活,产生一个方波。
LED的光检测器使用它的光电转换输出电压来驱动该晶体管基极的负和晶体管关闭。
假设LED1点亮。 LED1的阳极电压保持在+0.6 V(由Q4基极 - 发射极钳位)但LED在-1V的阴极驱动该Q1基极的负和关闭Q1的集电极电流产生一个负电压。 这释放U1E输入和振荡器启动。
这是其中的电路变得时髦:振荡器的输出被连接到一个“浮动的”RC网络,即一个没有直流连接到轨的网络。 外部的泄漏电流会导致在这样的网络中的漂移的DC电平。 尽管缺乏一个直流参考,这个网络的平均直流电平必须接近VCC / 2鼠标悬停才能动作。
测量在该浮动网络与示波器探头的波形可能会导致问题的探针具有1M或10M(×10设置)阻抗到GND。
我会建议增加VCC和GND之间的高电阻分压器连接到网络到网络的直流电平稳定到VCC / 2或更好的中点但仅低于低触发阈值(约为VCC / 3)
牢记,网络的必要浮动DC电平,在交流耦合波形,叠加在DC电平将穿越施密特的阈值,根据需要触发。
该U1E振荡器输出电容C2经由通过R3耦合到U1D的输入端。 该信号将被输入保护网络被钳位到VCC + 0.6 V。 U1D的输出将跟随输入刻不容缓。 从C2的耦合信号也驱动由R4和C4形成的集成RC网络。 这将导致VCC / 2的延迟信号叠加在直流出现在U1C的输入。 由于施密特触发器的正常阳性切换阈值是3V。 请参阅规格:
该VCC / 2信号本身是没有高到足以触发U1C的输入。 然而,随着所添加的DC电平,信号穿过U1C的造成延迟负输出脉冲在U1C的输出的阈值。
当U1E振荡器输出变为负,该信号被耦合到无延迟并通过R4的U1D的输出,并显示在U1C的输出信号通过C4延迟。
其结果是在U1D和U1C与U1C的输出延迟的信号之间的正交相位关系。
现在看看输出电路(在最好的传统,梁挺奇怪的)。 当振荡器被禁止U1C和U1D的输出都在VCC和电容器C1通过Q2和Q5通过步进线圈到VCC充电。
每个输出缓冲电压跟随器半桥功率级。
当U1C和U1D的输出脉冲,C1上的电压的平均值为VCC / 2为上限交替部分地通过步进线圈充电和部分地排出。 其结果是,通过在正交的是,步骤电机在一个方向上的每个线圈的双极性电流波形。
的动作是相同的LED2的照明系统除了延迟的正交信号将在U1D和电动机的步骤以相反的方向的情况。
完全充实的基础上,40106太阳能跟踪器
这是一个完整的电路。 它被设计来驱动以类似庄园运营步进电机电视旋转器。 在这种情况下,电动机是一种电容运转电机。 该电路提供了90度的正交驱动扭转运动。 VDD应该是大约30至40伏。
该传感器是高灵敏度高灵敏度伪可控硅传感器。督导将被添加到隔离的多种功能。 注意,电容器C10,以防止或抑制机械振动。
限位开关,以限制扩展运动。
脉冲振荡器添加到放慢机械机芯。 该运动是通过提供约4相移的周期,以每10秒左右的电机来完成的。 手动快速开关可以快速移动。
电平移位器,用于驱动功率MOSFET其中提供约3安培到电机。 欠压保护电路,防止损坏上MOSFET如果Vdd得到低于15伏。
5伏电压Vcc从Vdd的监管。
双极步进电机驱动器基于双四通道缓冲器
维尔夫和我一直在开发基于一个74AC240双四三态缓冲器另一个太阳能跟踪器。 已经有许多变型。 这些结果。
该74AC240步进驱动器的工作原理是使缓冲区各占一半。 只有一半可以在同一时间被激活。
让我们假定驾驶者的上半部分被启用。 U1A和U1B随着R8,C1,和输入保护电阻R7形成一个方波振荡器。 U1A和U1B的输出直接驱动一个双极步进电机的一个线圈。
U1C和U1D随着R9,C2,和输入保护电阻器R10形成一个90度的相移。 U1C和U1D的输出直接驱动双极步进电动机的其它线圈。 电机转动一个方向。
如果该驱动器的第二底部一半之前使用U1E&U1F工作启用振荡器。 U1H&U1G随着R12,C3和输入保护电阻R11形成一个90度的相移。 除了它连接周围的其他方法从之前所以它实际上是270度。 U1H&U1G的输出直接驱动双极步进电动机的其它线圈。 电机的旋转向另一个方向。 整齐的,??呵呵!
该电路的早期版本并没有很好地工作,因为传感器提出了一个模拟使能信号。 这是有时造成缓冲区有哪些是一件坏事高速空转电流,有时交叉耦合的阈值电压。 %^(
所需要的是一个传感器,有一个施密特触发输入。 这可以用一个施密特触发器门效果很好完成。 我建议40106或74AHCT14。 然而,这需要一个第二集成电路。
更好的解决方案是使传感器具有施密特行动。 参阅太阳跟踪器LED光敏传感器电路设计中伪可控硅传感器版本。问题是,伪可控硅电路工作在有限的电压范围效果更好。 Q1和Q3和Q2与Q4各自形成在操作上的SCR类似双稳态锁存器。
让我们先从左侧没有指示灯。 起初无电流流过。 该系列电阻R5及R2导致一个小的偏置电流流入Q1的基极,这反映了当前通过R1造成第三季度进行。 由于第3季短路R5的电流通过R2一倍。 在Q1的集电极的输出锁点高禁用连接的缓冲器。
(实际上不是必需的注意事项,R5和R6。事实证明,在晶体管的泄漏电流就足以开始,我尝试了许多晶体管和从来没有发现之一,因为预期没有工作。审慎的电路设计要求的R5& R6被包括在内,因为人们可能会发现一个晶体管是如此完美的它不会工作。游民。)
现在连接,LED1点亮具有吸收电流通过R2的饥饿Q1的关闭导致产量低捕捉能力。 Q3也将关闭减小偏置电流在R2至1/2。 这种情况持续存在,直到LED熄灭。
也许你会问,其中电流为LED的另一边来的。 它是从Q2的基极上的右侧。 实际上,当左侧是关闭的右侧打开时加倍作为从R2和R3通过基极的电流。
右侧的工作方式相同。 由于LED连接的反并联只有一个闩锁可以在同一时间被关闭。 这是安全的缓冲区。
当两个四元缓冲器被认为是关闭至关重要的是,所有的输入不为阈值附近有最低空闲电流。 R13和R14确保所有输入接近地面。 所有的输入连接到R13或R14是直接通过输入电阻器,或通过步进电机的绕组。 R13和R14也可以连接到VCC。 它们甚至不需要是相同的电压,但它的运作更快,如果它们是相同的电压。
我已经测试该电路,约25种不同的74AC240s。 他们都如预期般运作。
我跑的电路从约2.4V到8.5V。 好了,我们不应该走过去7V是74AC240的规格之内。 我什至发现了一些74AC240s的工作至14V,但我不推荐这样做。
传感器部进行了测试,以40V。 它仍然运作良好,灵敏度较低,因为偏置电流与电压成正比,需要较强的光照才能正常工作。
步模式不是完全对称的,因为这基本上是一个模拟电路。 一些电阻调整可能是必要的。
来改变电机的速度调节电容值。 请注意,所有这三个需要是相同的值。
我所选择R9-C2&R12-C3的时间常数为约的R8-C1 3/4ths。 尽量保持这些比率。 (顺便说一句,我不知道这是确切的比例,但它煤层有关的权利。)
10M的电阻传感器是1/8W规模最大常用的电阻。 我试过22M的1/4W和添加了灵敏度行之有效。 我想,如果你能找到100M他们将工作做得更好。 不过要小心在董事会和晶体管的漏电流。
双极步进电机驱动器基于双四通道缓冲器
优化的电路布局
这个变体使用零件数相同,但有一个更好的布局。
操作的描述是相同的,除了移相器是相反的,并且连接到振荡器的单点上面的电路。
这可能会使用74AC125四单MUX另有振荡器可能存在有一个应用程序。
双极步进电机驱动器基于双四通道缓冲器
我的第一次尝试,注意整齐电路的对称性。
我添加了一个LED传感器维尔夫的三大桥
予需要驱动右侧的桥与一个倒置的信号。 这个信号是不可用的左侧。 我需要添加一个逆变器。 该逆变器具有10K集电极负载电阻。 这拉起右侧时,左侧为低。 当左侧进入喜逆变器晶体管导通拉动右侧低。
该PSH H桥电路中有一个奇怪的怪癖。 它不能很好地工作,当输入被拉到一个电源轨。 问题是,驱动晶体管只能饱和这么多。 这饿死基极电流的输出晶体管。 简单的解决方案是让任何一个输入电阻或限制电压和二极管像我一样在这里。
整齐的桥梁。
这种效果要好得多
在这种LED的最后一个版本弥合操作限制在3.6V或更高。 在这个版本中,我试图使其在较低的电压下工作以大大提高了灵敏度。
LED1&LED2以及Q11和Q12组成一个敏感的光电流放大器。 只有这些晶体管中的一个可以在同一时间为ON。 让我们假设LED1点亮。 放大Q12供应LED到Q10的电流,然后Q7再到输出晶体管Q3。 此外Q7经过三重放大LED电流出它的发射器和进Q6的发射极的传输,目前的出Q6的集电极和成输出晶体管Q2的基极。 R1和R2形成一个分压器在一半的供应量。 这有助于打开Q6。
该电路基本上是模拟性质。 驱动到电机的电流是成比例的LED对供给的电流的差值。 所以,当同样亮,或太暗,目前趋于零。
我发现的第一个版本行之有??效从2.9V上了。 为了改善这种我加D1向下延伸操作2.5V左右。 这两个版本都低怠速电流主要从R1和R2。
通过添加第二个二极管,D2,操作工作下降到约1.9V。 然而,空闲电流较高。 约1mA在1.9V至约10mA在5V。
该电路是普通室内光线在我的实验室,点燃荧光灯相当敏感。 只是定向插头板放在桌子上变化,从全面推进电机反转。 手部有轻微的波浪造成极大的影响。 非常敏感。
喜欢该文的人也喜欢毕业设计《智能遥控窗帘》,光敏电阻去控制步进电机的正反转。求C程序_百度知道
毕业设计《智能遥控窗帘》,光敏电阻去控制步进电机的正反转。求C程序
比较器和P1.1口相连,步进电机驱动模块和P0.1,P0.2,P0.3,P0.4相连
我有更好的答案
声光延时开关知道吧,可以参考那个电路做前级,输出高低电平给单片机驱动电路控制电机。如果单片机带AD就更简单了,直接采光敏电阻上的电压,超过阀值就控制电机动作。电机用4相5线的好控制正反转,一片2003就能驱动;2相4线的话一般用L298驱动;程序没什么难的,把思路方法想通了相信你一天就能搞定。 动手做出实物才是耗时耗力的难点。
板子我已经焊完了,没法该了,所以我只求程序,恕我无法给你采纳,这不是我想要得,非常谢谢你
没关系!另外友情提示你:没有图纸一定不会有程序。
C程序不会。
为您推荐:
其他类似问题
您可能关注的内容
光敏电阻的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 步进电机速度控制程序 的文章

 

随机推荐