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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11341|回復(fù): 19
打印 上一主題 下一主題
收起左側(cè)

自制標(biāo)簽送料器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:66032 發(fā)表于 2014-9-30 08:49 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
此制作是用的步進電機, 也可以用直流電機加Ad,用起來還不錯,有點噪音。

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

使用道具 舉報

沙發(fā)
ID:66032 發(fā)表于 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;
            }
         }      
   }
}


回復(fù)

使用道具 舉報

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

回復(fù)

使用道具 舉報

地板
ID:51090 發(fā)表于 2014-9-30 13:02 | 只看該作者
大神級別的作品啊  學(xué)習(xí)了
回復(fù)

使用道具 舉報

5#
ID:26188 發(fā)表于 2014-9-30 13:30 | 只看該作者
佩服啊 換個殼子的話 就可以量產(chǎn)做產(chǎn)品了  應(yīng)該有銷路的.
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

im4511_20140930_015235.pdf

27.35 KB, 下載次數(shù): 38, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

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

使用道具 舉報

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

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

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



回復(fù)

使用道具 舉報

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

使用道具 舉報

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

兄弟你太有才了,不得不佩服,這樣具有學(xué)習(xí)能力的單片機大有前途呀。
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

17#
ID:28571 發(fā)表于 2015-4-16 19:59 | 只看該作者
非常好東西,學(xué)習(xí)一下!
回復(fù)

使用道具 舉報

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

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

使用道具 舉報

19#
ID:399179 發(fā)表于 2018-10-22 19:23 來自手機 | 只看該作者
樓主牛人,學(xué)習(xí)了!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 青青激情网 | 玖玖视频免费 | 亚洲精品美女 | 激情欧美一区二区三区 | 一级毛片视频 | 国产精品久久久久久久免费观看 | 精品99在线 | 久草在线 | 日韩一区二区三区精品 | 在线国产小视频 | 久久久久久久久久久丰满 | 欧美精品久久久久 | 黄色精品| 天堂一区二区三区四区 | 欧美伊人久久久久久久久影院 | 精品久久久久久久久久久久 | 亚洲影音| 久久久久国产一区二区三区 | 中文字幕国产 | 婷婷久 | 91在线影院| 视频在线观看亚洲 | 日韩a | 色吧久久 | 欧产日产国产精品视频 | 国产免费看| 欧美一区二区三区在线 | 欧美日韩一区在线 | 亚洲在线免费观看 | 超碰综合 | 噜噜噜色网 | 精品亚洲一区二区三区四区五区 | 亚洲在线成人 | 国产精品视频偷伦精品视频 | 欧美一级特黄aaa大片在线观看 | 91久久国产综合久久91精品网站 | 91看片网 | 欧美国产日韩成人 | 综合另类 | 欧美成人精品一区二区三区 | av天空|