logo资料库

AD转换结果控制直流电机.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
#include #include #include #include #include #include #include #include #include #include #include "s3c2410-adc.h" #define ADC_DEV static int adc_fd = -1; "/dev/adc/0raw" #define ADC_DEV #define DCM_IOCTRL_SETPWM #define DCM_TCNTB0 "/dev/adc/0raw" (0x10) (16384) static int init_ADdevice(void) { if((adc_fd=open(ADC_DEV, O_RDWR))<0){ printf("Error opening %s adc device\n", ADC_DEV); return -1; } } static int GetADresult(int channel) { int PRESCALE=0XFF; int data=ADC_WRITE(channel, PRESCALE); write(adc_fd, &data, sizeof(data)); read(adc_fd, &data, sizeof(data)); return data; } static int stop=0; static void* comMonitor(void* data) { getchar(); stop=1; return NULL; }
static int dcm_fd = -1; char *DCM_DEV="/dev/dcm/0raw"; void Delay(int t) { int i; for(;t>0;t--) for(i=0;i<400;i++); } int main(int argc, char **argv) { float data[10]={0}; float aver; int j; float d; pthread_t th_com; void * retval; int i = 0; //int status = 1; int setpwm = 0; int factor = DCM_TCNTB0/1024; //set s3c44b0 AD register and start AD if(init_ADdevice()<0){ printf("Error opening %s adc device\n", ADC_DEV); return -1; } /* Create the threads */ pthread_create(&th_com, NULL, comMonitor, 0); printf("\nPress Enter key start!\n"); if((dcm_fd=open(DCM_DEV, O_WRONLY))<0){ printf("Error opening %s device\n", DCM_DEV); return 1; } //the filter while( stop==0 ){ data[j]=(float)GetADresult(1); for(j=9;j>0;j--) { data[j]=data[j-1]; aver+=data[j]; } aver=aver/10;
printf("a%d=%8.4f\t",1,aver); setpwm = aver-512; if(setpwm >20) printf("fanzhuan"); else if (setpwm <-20) printf("zhengzhuan"); else printf("tingzhi"); ioctl(dcm_fd, DCM_IOCTRL_SETPWM, (setpwm * factor)); Delay(500); printf("setpwm = %d \n", setpwm); usleep(1); printf("\r"); } pthread_join(th_com, &retval); printf("/n"); close(dcm_fd); return 0; }
分享到:
收藏