找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 11408|回復(fù): 19
收起左側(cè)

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

[復(fù)制鏈接]
ID:66032 發(fā)表于 2014-9-30 08:49 | 顯示全部樓層 |閱讀模式
此制作是用的步進(jìn)電機(jī), 也可以用直流電機(jī)加Ad,用起來(lái)還不錯(cuò),有點(diǎn)噪音。

回復(fù)

使用道具 舉報(bào)

ID:399179 發(fā)表于 2018-10-22 19:23 來(lái)自手機(jī) | 顯示全部樓層
樓主牛人,學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

ID:409674 發(fā)表于 2018-10-22 01:07 來(lái)自手機(jī) | 顯示全部樓層
mqwu 發(fā)表于 2014-10-1 11:12
用來(lái)貼產(chǎn)品的標(biāo)簽,每次員工值接用一只手就可以貼標(biāo)簽了, 沒有這個(gè)勢(shì)必要用兩只手,相當(dāng)于解放一只手拿產(chǎn) ...

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

使用道具 舉報(bào)

ID:28571 發(fā)表于 2015-4-16 19:59 | 顯示全部樓層
非常好東西,學(xué)習(xí)一下!
回復(fù)

使用道具 舉報(bào)

ID:66032 發(fā)表于 2014-10-1 13:03 | 顯示全部樓層
沒有影響,因?yàn)镻IC18系列運(yùn)行一個(gè)指令周期很短,只要4個(gè)時(shí)鐘周期,你若用4M的晶振, 也就需要1uS,而數(shù)碼管的動(dòng)態(tài)掃描用的delay(10),就相當(dāng)于10x10uS,遠(yuǎn)比E2PROM寫和讀長(zhǎng)。
回復(fù)

使用道具 舉報(bào)

ID:19715 發(fā)表于 2014-10-1 12:49 | 顯示全部樓層
當(dāng)運(yùn)行EEPROM_write();時(shí),
對(duì)數(shù)碼管顯示,步進(jìn)電機(jī)有影響嗎
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:66032 發(fā)表于 2014-10-1 11:38 | 顯示全部樓層
是的,你說(shuō)的非常正確
回復(fù)

使用道具 舉報(bào)

ID:19715 發(fā)表于 2014-10-1 11:19 | 顯示全部樓層
底下那個(gè)傳感器是用來(lái)檢測(cè)標(biāo)簽到位嗎
回復(fù)

使用道具 舉報(bào)

ID:19715 發(fā)表于 2014-10-1 11:16 | 顯示全部樓層
mqwu 發(fā)表于 2014-10-1 11:12
用來(lái)貼產(chǎn)品的標(biāo)簽,每次員工值接用一只手就可以貼標(biāo)簽了, 沒有這個(gè)勢(shì)必要用兩只手,相當(dāng)于解放一只手拿產(chǎn) ...

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:19715 發(fā)表于 2014-10-1 10:17 | 顯示全部樓層
本帖最后由 明白 于 2014-10-1 11:13 編輯

步進(jìn)電機(jī)速度高了,噪音挺大
機(jī)器用來(lái)干什么的?

先占個(gè)位!請(qǐng)樓主講解一下是干嗎的!



回復(fù)

使用道具 舉報(bào)

ID:19715 發(fā)表于 2014-10-1 10:15 | 顯示全部樓層
非常有水平,做得挺牛
建議樓上跟中央臺(tái)《我愛發(fā)明》欄目聯(lián)系,會(huì)優(yōu)先采納。
回復(fù)

使用道具 舉報(bào)

ID:66032 發(fā)表于 2014-9-30 17:13 | 顯示全部樓層
Label feeder

im4511_20140930_015235.pdf

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

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2014-9-30 14:53 | 顯示全部樓層
好東西  ,樓主能上傳個(gè)電路圖嗎?
回復(fù)

使用道具 舉報(bào)

ID:26188 發(fā)表于 2014-9-30 13:30 | 顯示全部樓層
佩服啊 換個(gè)殼子的話 就可以量產(chǎn)做產(chǎn)品了  應(yīng)該有銷路的.
回復(fù)

使用道具 舉報(bào)

ID:51090 發(fā)表于 2014-9-30 13:02 | 顯示全部樓層
大神級(jí)別的作品啊  學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:66032 發(fā)表于 2014-9-30 08:59 | 顯示全部樓層
IMG_3424.JPG IMG_3423.JPG
回復(fù)

使用道具 舉報(bào)

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ù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表