1

关于投票
简易摇摇棒,8x8点阵,制作公开
这个玩艺技术含量并不高,对坛中高手不过小菜一碟,就是本人学习avr的一点成果吧{
硬件mega8l,8个led共阳极接到PORTD。3位拨码开关接到PINB2,PINB1,PINB0,选择显示内容,PINC4接方向开关,使得正反向摇动都显示正向字,每次显示4个8X8点阵汉字(自己编制的),电路:

点击看大图
 (原文件名:tmp02.jpg) 


简单点也可以只用1排LED,PINC4上的方向开关最好用滚珠开关,没有买到,只好用废旧鼠标按钮手工操作
用CVAVR.其中设置等等为自动生成的
代码如下:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.6 Evaluation
Automatic Program Generator
?Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : FOR NO EDITCARD!
Version : 
Date    : 2007-11-1
Author  : Freeware, for evaluation and non-commercial use only
Company : 
Comments: 


Chip type           : ATmega8L
Program type        : Application
Clock frequency     : 1.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega8.h>
#include <delay.h>
// Declare your global variables here
 
char dsp1,dsp2,dsp3,dsp4;           //索引
char word1[8],word2[8],word3[8],word4[8];  //显示数组

const  char  playdsp[16][8]={{0XF7,0X03,0XFC,0XB7,0X78,0X03,0XDB,0XB3}, //小小字库,自己瞎编的,
                     {0X7B,0XA3,0XD8,0XA3,0XF6,0X76,0X02,0XF4},       
                     {0XAB,0XDB,0XA3,0X77,0XB8,0XCB,0XBB,0X73},       
                     {0X6B,0X87,0XBB,0X45,0X6E,0X03,0X7B,0X43},       
                     {0XBF,0XC1,0X75,0X95,0XE0,0XD5,0XB5,0X7D},       
                     {0XDB,0XEA,0X01,0XAB,0XD0,0X86,0X76,0X38},        
                     {0XFD,0XF5,0XF4,0X05,0XD5,0XB4,0X85,0XFD},       
                     {0XFF,0XFF,0X03,0X6D,0X6D,0X7D,0X81,0XFF},       
                     {0X87,0X01,0XD7,0X5B,0X80,0XDB,0X83,0X5F},       
                     {0XEF,0X6D,0XA3,0X6D,0X02,0XEE,0XBE,0X6F},       
                     {0XF7,0X78,0X6B,0X6B,0X00,0X6B,0X6B,0X7B},       
                     {0XF7,0X03,0XFC,0X77,0X55,0X00,0X55,0X77},       
                     {0X7B,0XBB,0X9B,0XE0,0XDB,0XBB,0X7B,0X7F},       
                     {0XFF,0XFD,0X15,0X55,0X50,0X55,0X95,0XFD},       
                     {0xf5,0x78,0x05,0x91,0xb8,0xa8,0x02,0x78},              
                     {0XB7,0XD5,0X01,0XD5,0XF6,0XC3,0X7F,0X81}};       
                     // 你//好*//*欢*//*迎*//*庆*//*祝*//*节*//*日*//*快*//*乐*//*生*//*佳*//*大*/
                     /*吉*//*贺*//*利*/ 
/////////////////////////////////////////////play                     
void ply(void)     // ok
{
 signed char i; 
 PORTB=0XFF;
 DDRB=0;
 if ((!PINB.0)&(!PINB.1)&(!PINB.2))//000  拨码开关000,显示:你好欢迎
    {
     dsp1=0;
     dsp2=1;
     dsp3=2;
     dsp4=3;
    }        
    else if ((PINB.0)&(!PINB.1)&(!PINB.2))//001  拨码开关001,显示:庆祝节日
           {
                dsp1=4;
                dsp2=5;
                dsp3=6;
                dsp4=7;
           }   
           else if ((!PINB.0)&(PINB.1)&(!PINB.2))//010  拨码开关010,显示:节日快乐
           {
                dsp1=6;
                dsp2=7;
                dsp3=8;
                dsp4=9;
           }              
           else if ((PINB.0)&(PINB.1)&(!PINB.2))//011  拨码开关011,显示:生日快乐
           {
                dsp1=10;
                dsp2=7;
                dsp3=8;
                dsp4=9;
           }   
           else if ((!PINB.0)&(!PINB.1)&(PINB.2))//100  拨码开关100,显示:庆贺佳节
           {
                dsp1=4;
                dsp2=14;
                dsp3=11;
                dsp4=6;
           } 
           else if ((PINB.0)&(!PINB.1)&(PINB.2))//101  拨码开关101,显示:大吉大利
           {
                dsp1=12;
                dsp2=13;
                dsp3=12;
                dsp4=15;
           } 
           else if ((!PINB.0)&(PINB.1)&(PINB.2))//110  拨码开关110,显示:庆贺生日
           {
                dsp1=4;
                dsp2=14;
                dsp3=10;
                dsp4=7;
           } 
           else //111  拨码开关111,显示:佳节快乐
           {
                dsp1=11;
                dsp2=6;
                dsp3=8;
                dsp4=9;
           }         
  
 for ( i=0; i<=7; i++ )
   { 
   word1[i]=*(playdsp[dsp1]+i);  //根据索引从字库查出显示码
   word2[i]=*(playdsp[dsp2]+i);
   word3[i]=*(playdsp[dsp3]+i);
   word4[i]=*(playdsp[dsp4]+i);
   }
  while(1)
 {   
  while (PINC.4)        //move forward loop 1  正相运动
  {
   delay_ms(10);         //延时避免换向开始出现镜像字
   for (i=0;i<=7;i++)    //顺序显示第1个字的字库显示码
   {
    
    PORTD=word1[i];      //依次把显示码送到PORTD就空中刷出字来了
    delay_ms(2);
    PORTD=0XFF;
   }
   PORTD=0XFF;          //显示完1个字关闭6毫秒形成字间间隔
   delay_ms(6);
   for (i=0;i<=7;i++)   //类似,显示第2个字
   {
    PORTD=word2[i];
    delay_ms(2);
    PORTD=0XFF;
   }
   PORTD=0XFF; 
   delay_ms(6);
   for (i=0;i<=7;i++)   //类似,显示第3个字
   {
    PORTD=word3[i];
    delay_ms(2);
    PORTD=0XFF;
   }
   PORTD=0XFF;
   delay_ms(6);
   for (i=0;i<=7;i++)   //类似,显示第4个字
   {
    PORTD=word4[i];
    delay_ms(2);
    PORTD=0XFF;
   }
   PORTD=0XFF;
   delay_ms(6);
  } 
  
  while (!PINC.4)      //move backward  loop 2  反向运动时,显示必须从最后一个字最后1列反向显示
  {
   delay_ms(10);        //延时避免换向开始出现镜像字
   for (i=7;i>=0;i--)   //顺序显示第4个字的字库显示码,从后往前显示一下都类似
   {
      
    PORTD=word4[i];
    delay_ms(2);
    PORTD=0XFF;
   } 
   PORTD=0XFF;            
   delay_ms(6);
   for (i=7;i>=0;i--)
   {
    
    PORTD=word3[i];
    delay_ms(2);
    PORTD=0XFF;
    
   }
   
    PORTD=0XFF;
    delay_ms(6);
   for (i=7;i>=0;i--)
   {
   
    PORTD=word2[i];
    delay_ms(2);
    PORTD=0XFF;
    
   } 
    PORTD=0XFF;
    delay_ms(6);
   for (i=7;i>=0;i--)
   {
   
    PORTD=word1[i];
    delay_ms(2);
    PORTD=0XFF;
    
   } 
    PORTD=0XFF;
    delay_ms(6);
  }
 } 
}
void main(void)                //下面的初始化代码都是cv自动生成添加的仅仅是“ply()”
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P 
PORTB=0xFF;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State6=T State5=T State4=P State3=T State2=T State1=T State0=T 
PORTC=0x10;
DDRC=0x00;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1 
PORTD=0xFF;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

while (1)
      {
      // Place your code here
      ply();
      };
}

下面的都不错

转自http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=979582&bbs_page_no=1&search_mode=1&search_text=摇&bbs_id=9999

奇幻魔术棒,摇出你的精彩!!!

另外有 http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=642162&bbs_page_no=1&search_mode=1&search_text=摇&bbs_id=9999

帮朋友小孩做的手摇棒

http://www.cdle.net/bbs/dispbbs.asp?boardid=2&id=17573&page=&star=1

LED显示摇棒制作

http://www.runmcu.com/Article/ShowArticle.asp?ArticleID=768

系统分类: 模拟技术
用户分类: 单片机
标签: 无标签
来源: 转贴
发表评论 阅读全文(252) | 回复(3)

2

关于投票
555的可调PWM仿真 (proteus)

 

         这个是我以前收藏的。

    这玩意很有用的,加上一个热敏电阻可以做温控风扇了, 做步进电机试验时也用得上 哈。大家一起分享哦

点击下载

系统分类: 模拟技术
用户分类:
标签: 无标签
来源: 转贴
发表评论 阅读全文(150) | 回复(2)

0

关于投票
PWM控制技术在直流无刷电机调速系统中的应用

点击下载      图片不好帖,传了个附件

1 引言
脉宽 调 制 (PWM)是利用数字输出对模拟电路进行控制的一种有效技术,尤其是在对电机的转速控制方
面,可大大节省能量。
PW M 具 有很强的抗噪性,且有节约空间、比较经济等特点。模拟控制电路有以下缺陷:模拟电路容易随
时间漂移,会产生一些不必要的热损耗,以及对噪声敏感等。而在用了PWM技术后,避免了以上的缺陷,实
现了用数字方式来控制模拟信号,可以大幅度降低成本和功耗。
2 直流无刷电机
直流 无 刷 电机由电动机、转子位置传感器和电子开关线路三部分组成,它的原理框图如图1所示。图1
中直流电源通过开关线路向电动机定子绕组供电,电动机转子位置由位置传感器检测并提供信号去触发开
关线路中的功率开关元件使之导通或截止,从而控制电动机的转动。在应用实例中,磁极旋转,电枢静止,电
枢绕组里的电流换向借助于位置传感器和电子开关电路来实现。
图 1 直 流 无 刷 电机 原 理 框 图
电机 的 电 枢绕组作成三相,转子由永磁材料制成,与转子轴相连的位置传感器采用霍尔传感器。3600范
围内,两两相差1200安装,共安装三个。为了提高电机的特性,电机采用二相导通星形三相六状态的工作方
,收稿日期:2006-08- L4
2006年12月火控雷达技术第35卷
式。开关电路采用三相桥式接线方式。它的工作原理如图2所示。其导通顺序按AB-AC-BC-BA-CACB
进行,共六种状态。故磁状态角0x= 耐3,每种工作状态均为两相导通串联导电工作。
功 放 级
图 2 电 机 工 作 原 理 图
3 调速控制
3.1 逻辑控制部分
根据 表 1中所示的导通顺序,要求转子导磁体张角a,,= 2 川3。无刷直流电机的位置传感器选用霍尔器
件,三个霍尔传感器两两之间互成120“安装。位置传感器所产生的信号I-I,.H ,.I H ,送给波形整形器进行整
形。
表 中有 密 横线部分表示管子的导通角)f、绕组磁
状态角B:o
转 子 导 磁体张角a,、的选择一般稍大于27r/3,大约
做成130“左右。这样作的目的是,在电机电枢绕组换相
时,总有一瞬间两绕组重迭导通。死点和可靠起动的问
题解决了,但对于桥式开关电路,就可能出现上下两管
同时导通,而使电源短路的现象。为了解决这一问题,
将传感器三路输出信号进行逻辑组合,保证电枢电流
换相时,既确保电流衔接,又确保管子安全。从波形来
说,后沿跟前沿刚好搭接上。即重叠1。左右。这样就可
以不至于因电源短路而烧坏管子,又可以做到换相及
时,不出现空档(即死点),其逻辑组合的波形如图3所示
表1 绕组导电顺序和功率管工作关系表
二/3 27x/3 二37x/4 57x/3 27r
门划
间角
漪电
导通
顺序
A B c
B C A B
T1
!
不一-一一
T2 卜砚毖洲书曰芯下芯卜心写减匕汉匕

T3 二之吕户忿众匕户
l
忿只七众匕众岑
T4
!
产、口沪、尸产、曰沪、尸沪、甲尹、训产、甲
l
T5 久匕久匕众匕
}
T6
I
只岑属七汉七另、子产、“ 产、曰产、曰

主要 作 用 是实现信号逻辑组合,信号经过逻辑组合控制后,起着电机起动不出现死点和不烧功放管及稳
速功能。具体实现选用三输人三与门4073一块,三输人三与非门4023一块及4049六反相器一块等COMS
集成电路组成。
3.2 调速以及稳速控制
在调 速 电 路中,主要采用时基电路LM555和脉宽调制器SG1525来完成,LM555用于产生一个占空比
一定、且有固定频率的方波信号。SG1525为单片脉宽调制型控制器芯片,具有输出5.1V 的基准稳压电源、
误差放大器、振荡频率在100^ 400kHz范围内的锯齿波振荡器、软启动电路、关闭电路、脉宽调制比较器、RS
寄存器以及保护电路等。它解决了PWM电路的集成化问题,在实例中用此芯片来实现系统的调速。
在具 体 的 电路中,首先对位置传感器信号进行整形,形成所需要的前后沿很陡,具有一定宽度的波形。经
微分电路微分,产生的微分脉冲去触发时基电路LM555,形成占空比为2:1的方波,方波频率约为200Hzo
此方波频率计算公式为:
f二 n * p/ 60
式中,Y1为电机的额定转速r/min, f为位置传感器输出信号的频率、P为电机的极对数。
方 波 经 滤波器滤波后,形成直流电压送人脉宽调制器,与脉宽调制器的反馈电压进行比较,利用得到的
误差信号去控制脉宽调制器输出的调制方波脉冲的宽度变化,即PWM输出脉冲占空比的变化,利用占空比
的变化调整加在电机电枢绕组上的电压,改变电压随即改变电机电流,转速依据电流的大小来改变,实现了
38
第4期李小艳PWM控制技术在直流无1*1电机调速系统中的应用
H, -H,
D 2D 3 D 4 D 0 D 2D 3 D 4 D
H,’H,
H, -H,
H, H,.H,
H,
D 2D 3 D 4 D
H, H,.H
0 D
- 书一~一刁卜~~川卜~~州卜~
2D 3 D 4D 0 D 2D 3 D 4D
图 3 逻 辑 组 合 波 形 图
调速功能。稳速功能的实现即是要求加在绕组上的电压处于一个动态稳定的电压值,稳速的实现实质上就是
让电枢绕组上的电压稳定。即用稳压来实现电机稳速。
图 4 集 成 电 路 脉 宽 调 制 框 图
集成 电路 脉宽调制器的基本结构框图见图4,取自输出端的反馈信号U,加在误差放大器的同相输入
端,固定的基准电压信号Ullr力口在误差放大器的反相输人端。固定频率振荡器产生的线性增长的锯齿波电压
U,加在比较器的同相输人端,当锯齿波电压U,高于误差信号U。时,比较器输出为正,反之为零。振荡器的
输出电压U,同时送到触发器的CP输人端使触发器翻转。由触发器作
用得到了A,B两种不同的被调制电压信号。
在 稳 速 过程中,当输出电压减小时,反馈信号、误差信号随着减
小,比较器和A,B两通道输出的方波宽度相应增宽,即占空比增大,
从而使输出电压回升,达到稳压的目的,从而稳速.
PW M 调 速过程实际上是(V一占空比)转换过程,电压与占空比
的转化如图5所示。
图 5中 , 脉冲宽度:的改变是随着U。的改变而改变。假定在没有
误差的情况下,all= 0 时的基本形式:==o。当,,.At‘增加,t%,减 小,与11T,
比较,输出高电平,使得直线AB下移到A'B' ,这时:变为:,,脉宽增
加。A[u 减少,CT, 增加,与U、比较,输出低电平,使得AB线上移至A
A/ 一习几/ H,.
41-1i口叱 / I{ 「宜
卜-*l1泣二己二「— 1口卜~,. !l !
」1匡‘ l
已目昌二目.二口二严T,D
. 了
图5 v一占空比转换示意图
(下 转 第 7 7 页 )
第4期杨俐C波段双塞地雷达频率综合器的设计
5 研制结果
经过 测 试 ,以上述方案研制完成的频率综合器达到了所要求的技术指标。其中发射站频综射频信号Fc
技术指标实测如下:
输 出 频段 :C波段,28个频点;
输出射频信号形式:调频斜率为对称三角形的线性调频连续波射频信号,调频带宽士4MHz;
输出信号功率:>15mW;
相位噪声:£<1kHz)<一105dBc/Hz;
杂散:镇一60dB
接收站频综一本振信号主要技术指标实测如下:
一本振fl.,工作频段:C波段,频率间隔30MHz;
输出信号功率:>1W,带内功率起伏<1.3d B;
相位噪声:一108dBc/Hz;
杂散:成一65dB,
图4 发射站频率源频率合成方框图
6 结束语
上述 频 率 综合器在方案设计、工程适应性设计、模块化设计、电磁兼容性设计以及结构设计等方面进行
了认真分析与仿真,通过项目组同事的共同努力研制出的频率综合器,已经交付总站使用,完全满足雷达系
统的要求,并已成功应用于双基地雷达系统中。
参考文献:
[1」弋稳.雷达接收机技术[M].北京:电子工业出版社,2005.
[幻白居宪.低噪声频率合成[M].西安:西安交通大学出版社,1995.
(上接第39页)
Blf,这时:变为r2,脉宽变窄。那么此脉冲经功率放大后,流过电机电流的电流I随之变化。很显然,脉宽比较宽
的,I大,电机转速增加。脉宽窄的I小,电机转速下降。基于这一原理,就可以实现电机调速和稳速的要求。
4 结束语
在应 用 实 例中,PWM对调速系统来说,有如下优点:系统的响应速度和稳定精度等指标比较好;电枢电
流的脉动量小,容易连续,而且可以不必外加滤波电抗也可以平稳工作;系统的调速范围宽;使用元件少、线
路简单。
参考文献:
[1〕机电一体化实用技术[M].上海:上海科学技术文献出版社.
「幻开关稳压电源[M〕.北京:高等教育出版社.

系统分类: 模拟技术
用户分类:
标签: 无标签
来源: 转贴
发表评论 阅读全文(131) | 回复(0)
总共 , 当前 /