久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11399|回復: 19
打印 上一主題 下一主題
收起左側

自制標簽送料器

[復制鏈接]
跳轉到指定樓層
樓主
此制作是用的步進電機, 也可以用直流電機加Ad,用起來還不錯,有點噪音。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:66032 發表于 2014-9-30 08:51 | 只看該作者
source code
/**********************************************************/
/* PIC18F4620 ????: 1?42 6???????, 1?L298N????,2??????AD?? */
/* 1??????????? */
#include <pic18.h>   
__PROG_CONFIG(1,0xc200);
__PROG_CONFIG(2,0x001e);
__PROG_CONFIG(3,0x0100);
__PROG_CONFIG(4,0x0081);
__PROG_CONFIG(5,0xc00f);
__PROG_CONFIG(6,0xe00f);
__PROG_CONFIG(7,0x400f);

#define uchar unsigned char
#define uint unsigned int
#define seg1 PORTAbits.RA2
#define seg2 PORTAbits.RA3
#define seg3 PORTAbits.RA4
#define seg4 PORTAbits.RA5
#define reset_check PORTEbits.RE0//pull-up with a 4.7K res to Vcc
#define count_clr PORTEbits.RE1//pull-up with a 4.7K res to Vcc

const uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
const uchar coil_active[]={0x01,0x05,0x04,0x06,0x02,0x0a,0x08,0x09};

static uchar wait_t=0,speed=100;
uint count;
uchar num0,num1,num2,num3;

void delay(uint z);
void Port_init(void);
void display(void);
void EEPROM_write(uchar wr_data,uchar wr_addr);
void timer0_init(void);
uchar EEPROM_read(uchar addr);
void forward(void);
void hyst_forward(void);

void main()
{
uint temp1,temp2;
Port_init();
timer0_init();
delay(10);
temp1=EEPROM_read(0x01);//Æô¶ˉ¶áè¡éÏò»′Îê1óñêÇ©μÄêy¾Y£»
temp2=EEPROM_read(0x02);//Æô¶ˉ¶áè¡éÏò»′Îê1óñêÇ©μÄêy¾Y£»
count=temp1*256+temp2;
while(1)
{
     display();
     if (reset_check==0)
        {
            delay(10);
            if(reset_check==0)
             {  
                        count++;
                    hyst_forward();
                    EEPROM_write(count/256,0x01);
                    EEPROM_write(count%256,0x02);
                    if(count==10000)
                        count=0;
                    while(!reset_check);
              }
         }
     else
        forward();
    if (count_clr==0)
     {
        delay(10);
        if (count_clr==0)
          {
            count=0;
            EEPROM_write(0,0x01);//clear the data from E2PROM
            EEPROM_write(0,0x02);//clear the data from E2PROM
          }
     }
}

}

void delay(uint z)
{
  uint x,y;
  for(x=0;x<z;x++)
  for(y=0;y<10;y++);
}

void Port_init(void)
{
   TRISA=0x03;
   ADCON1=0x0D;//select AN0&AN1 as analog input channel;
   ADCON2=0x3A;//left justified, 20Tad, Tosc/32;
   TRISD=0x00;
   PORTD=0xff;//Numerical LED scanning;
   TRISC=0x00;//Step-Motor winding power-up;
   PORTC=0x00;
   TRISE=0x07;//set the PORTE as input I/O;
}

void timer0_init(void)
{
   INTCON=0xE0;//GIE, PEIE and timer0 overflow interrupt;
   T0CON=0x08;
   TMR0H=(65535-1000)/256; //set the time to be 1ms;
   TMR0L=(65535-1000)%256;  //set the time to be 1ms;
   TMR0ON=1;
}


void display(void)
{
   num0=count/1000;
   num1=count%1000/100;
   num2=count%100/10;
   num3=count%10;

   PORTD=table[num0];
   seg1=0;
   delay(10);
   seg1=1;
   PORTD=table[num1];
   seg2=0;
   delay(10);
   seg2=1;
   PORTD=table[num2];
   seg3=0;
   delay(10);
   seg3=1;
   PORTD=table[num3];
   seg4=0;
   delay(10);
   seg4=1;

}
void EEPROM_write(uchar wr_data,uchar wr_addr)
{
    GIE=0;  
    EEIF=0;
    EEADR=wr_addr;
    EEDATA=wr_data;
    EECON1bits.EEPGD=0;//
    EECON1bits.CFGS=0;//
    EECON1bits.WREN=1;
    EECON2=0x55;
    EECON2=0xaa;
    EECON1bits.WR=1;
    while(!EEIF);
    PIR2bits.EEIF=0;
    EECON1bits.WREN=0;
    GIE=1;
}

uchar EEPROM_read(uchar addr)
{   
    uchar temp;
    EEADR=addr;
    EECON1bits.EEPGD=0;
    EECON1bits.CFGS=0;
    EECON1bits.RD=1;
   // asm("NOP");
    temp=EEDATA;
    while(EECON1bits.RD);
    return temp;
}

void forward(void)
{
    static uchar j;
    for (j=0; j<8; j++)
     {
          PORTC=coil_active[j];
          delay(5);
          PORTC=0xff;
          delay(speed);   
          PORTC=coil_active[j];
          delay(5);
          PORTC=0xff;
          delay(speed);   
          PORTC=coil_active[j];
          delay(5);
          PORTC=0xff;
          delay(speed);  
          PORTC=coil_active[j];
          delay(5);
          PORTC=0xff;
          delay(speed);   
          PORTC=coil_active[j];
          delay(5);
          PORTC=0xff;
          delay(speed);            
     }
}
//*μ±¼ì2éμĸ′λDÅoÅo󣬡¡Ñóê±ò»¶Îê±¼äèñêÇ©íÑàë¾íÖ½£¬Â¶3öà′òÔ±ã2ù×÷Ô±ÄÃè¡£a£ˉ/
void hyst_forward(void)
{   
    static uchar j;
     while(wait_t--)
       {
        for (j=0; j<8; j++)
         {
              PORTC=coil_active[j];
              delay(5);
              PORTC=0xff;
              delay(speed);
              PORTC=coil_active[j];
              delay(5);
              PORTC=0xff;
              delay(speed);
              PORTC=coil_active[j];
              delay(50);
              PORTC=0xff;
              delay(speed);
              PORTC=coil_active[j];
              delay(5);
              PORTC=0xff;
              delay(speed);
              PORTC=coil_active[j];
              delay(5);
              PORTC=0xff;
              delay(speed);                 
         }            
     }
}

void interrupt timer0()//continous check if the speed & wait_t are changed
{  
   
    uchar i,count1;
    uint adval,sum=0;
    if (TMR0IF==1)
    {
        TMR0IF=0;
        TMR0ON=0;
        TMR0H=(65535-1000)/256; //set the time to be 1ms;
        TMR0L=(65535-1000)%256; //set the time to be 1ms;
        TMR0ON=1;
        count1++;
        if (count1==3)
         {
            for (i=0;i<10;i++)//sampling 10 times to get the stable data;
             {
                   ADCON0=0x00; //convert AN0 channel;
                   asm("NOP"); asm("NOP");asm("NOP");
                   GO=1;
                   while(GO);
                   adval=ADRESH;
               sum+=adval;
                   speed=(int)sum/10/10;//due to dalay()routine, this needs to be divided by 10;
            }   
                     
        }
         
        if (count1==6)
         {
            count1=0;
            for (i=0;i<10;i++)//sampling 10 times to get the stable data;
             {
                    ADCON0=0x04;//convert AN1 channel;
                    asm("NOP"); asm("NOP");asm("NOP");
                    GO=1;
                    while(GO);
                    adval=ADRESH;
                sum+=adval;
                    wait_t=(int)sum/10/2;//upon this actual operation;
            }
         }      
   }
}


回復

使用道具 舉報

板凳
ID:66032 發表于 2014-9-30 08:59 | 只看該作者

回復

使用道具 舉報

地板
ID:51090 發表于 2014-9-30 13:02 | 只看該作者
大神級別的作品啊  學習了
回復

使用道具 舉報

5#
ID:26188 發表于 2014-9-30 13:30 | 只看該作者
佩服啊 換個殼子的話 就可以量產做產品了  應該有銷路的.
回復

使用道具 舉報

6#
ID:1 發表于 2014-9-30 14:53 | 只看該作者
好東西  ,樓主能上傳個電路圖嗎?
回復

使用道具 舉報

7#
ID:66032 發表于 2014-9-30 17:13 | 只看該作者
Label feeder

im4511_20140930_015235.pdf

27.35 KB, 下載次數: 38, 下載積分: 黑幣 -5

回復

使用道具 舉報

8#
ID:19715 發表于 2014-10-1 10:15 | 只看該作者
非常有水平,做得挺牛
建議樓上跟中央臺《我愛發明》欄目聯系,會優先采納。
回復

使用道具 舉報

9#
ID:19715 發表于 2014-10-1 10:17 | 只看該作者
本帖最后由 明白 于 2014-10-1 11:13 編輯

步進電機速度高了,噪音挺大
機器用來干什么的?

先占個位!請樓主講解一下是干嗎的!



回復

使用道具 舉報

10#
ID:66032 發表于 2014-10-1 11:12 | 只看該作者
用來貼產品的標簽,每次員工值接用一只手就可以貼標簽了, 沒有這個勢必要用兩只手,相當于解放一只手拿產品做別的事,效率提高了,下一步,我打算用直流帶減速器馬達, 用PWM+AD來改變占空比控制,這樣電路更簡潔,程序更優化,我查了下,淘寶上賣的都是這種設計,我準備做個5臺給生產線試用
回復

使用道具 舉報

11#
ID:19715 發表于 2014-10-1 11:16 | 只看該作者
mqwu 發表于 2014-10-1 11:12
用來貼產品的標簽,每次員工值接用一只手就可以貼標簽了, 沒有這個勢必要用兩只手,相當于解放一只手拿產 ...

兄弟你太有才了,不得不佩服,這樣具有學習能力的單片機大有前途呀。
回復

使用道具 舉報

12#
ID:19715 發表于 2014-10-1 11:19 | 只看該作者
底下那個傳感器是用來檢測標簽到位嗎
回復

使用道具 舉報

13#
ID:66032 發表于 2014-10-1 11:38 | 只看該作者
是的,你說的非常正確
回復

使用道具 舉報

14#
ID:66032 發表于 2014-10-1 12:27 | 只看該作者
其實理工男蠻苦的,整天面對電子元件和電腦,較盡腦汁做一些屌絲們都不愿意做的事,也沒有樓上你說的那么有才, 只是忘掉世俗的浮躁和唯物拜金,做一點自己喜歡的事情罷了。同時也為了能夠生存混口飯吃,就這么簡單。
回復

使用道具 舉報

15#
ID:19715 發表于 2014-10-1 12:49 | 只看該作者
當運行EEPROM_write();時,
對數碼管顯示,步進電機有影響嗎
回復

使用道具 舉報

16#
ID:66032 發表于 2014-10-1 13:03 | 只看該作者
沒有影響,因為PIC18系列運行一個指令周期很短,只要4個時鐘周期,你若用4M的晶振, 也就需要1uS,而數碼管的動態掃描用的delay(10),就相當于10x10uS,遠比E2PROM寫和讀長。
回復

使用道具 舉報

17#
ID:28571 發表于 2015-4-16 19:59 | 只看該作者
非常好東西,學習一下!
回復

使用道具 舉報

18#
ID:409674 發表于 2018-10-22 01:07 來自手機 | 只看該作者
mqwu 發表于 2014-10-1 11:12
用來貼產品的標簽,每次員工值接用一只手就可以貼標簽了, 沒有這個勢必要用兩只手,相當于解放一只手拿產 ...

請教下,如何控制直流馬達停止及圈數?
回復

使用道具 舉報

19#
ID:399179 發表于 2018-10-22 19:23 來自手機 | 只看該作者
樓主牛人,學習了!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人免费在线 | 91在线看 | 三区在线观看 | 国产成人精品免费 | 国产欧美在线一区二区 | 一级片网站视频 | 色妞av| 亚洲国产日韩欧美 | 凹凸日日摸日日碰夜夜 | 久久久美女 | 欧美区在线 | 欧美成人免费在线视频 | 国产精品久久久久久 | 欧美激情国产日韩精品一区18 | 一区二区三区在线 | 日韩区| 日日操夜夜操视频 | 亚洲视频精品 | 国产精品久久国产精品久久 | 国产区一区二区三区 | 久久精品国产a三级三级三级 | 精品无码久久久久国产 | 国产精品1区 | 亚洲精品美女 | 99福利在线观看 | 夜夜久久 | 成人午夜影院 | 日本不卡高字幕在线2019 | 久草网址 | 日韩精品免费视频 | 久久一级免费视频 | 成人精品国产一区二区4080 | 怡红院怡春院一级毛片 | 爱草在线| 黄色一级大片在线免费看产 | 国产一级黄色网 | 97精品超碰一区二区三区 | 亚洲在线电影 | 久久大| 亚洲精品久久久久中文字幕欢迎你 | 操久久 |