12F675 ile Adc kontrollü pozisyoner.

Başlatan onurinci, 17 Mart 2017, 22:32:43

onurinci

hocam selam..
sizinde yardımınızla bir pozisyoner yapmıştım,Ankara ivedik'te bulduğum bir mekaniğe hükmediyordum,fakat limit switclerin bir tarafındaki özel yay fırlayıp gitmiş..

acaba yazılımda nasıl alt limit üst limit koyabilirim ?


https://youtu.be/3H4kkBQS8zw

@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT
DEFINE OSC 4
DEFINE OSCCAL_1K 1

TRISIO= %00000011 : GPIO= 0
CMCON= 7 : ANSEL= %00010011 : ADCON0= %10000000 : WPU= 0

DEFINE ADC_BITS 10    ' ADCIN resolution  (Bits)
'DEFINE ADC_CLOCK 1    ' ADC clock source  (Fosc/8)
DEFINE ADC_SAMPLEUS 10 ' ADC sampling time (uSec)

HAMK VAR WORD 60
HAMM VAR WORD 62

SYMBOL MOTORSAG= GPIO.4
SYMBOL MOTORSOL= GPIO.5

      GOSUB ADCAL
      PAUSE 200
Start:

      GOSUB adcal
  WHILE HAMK >HAMM
MOTORSAG= 1
      GOSUB ADCAL
  WEND
  WHILE HAMK<HAMM
MOTORSOL= 1
      GOSUB ADCAL
  WEND               

IF HAMK= HAMM THEN gosub fren
      GOTO Start
                     
FREN:
motorsag= 1
motorsol= 1
      PAUSE 500
MOTORSOL= 0
MOTORSAG= 0
      RETURN           
     
ADCAL:
      ADCIN 0,HAMM
      ADCIN 1,HAMK
      RETURN

ete

Yazılım hiç bir yerden referans almıyor. Bu nedenle herhangi bir kısıtlama koyabileceğini sanmıyorum. Yazılımın tek yaptığı sağa dön, sola dön yada dur emrini vermek. Bu nedenle bana kalırsa mekanik çözüm bulmak zorundasın. Vida dişi üzerinde kayan bir parça var en güzeli onun ulaştığı son noktalarda birer mikro-switch'e basarak motoru durdurmasıdır. Onuda nasıl yapacağını tarif etmeyeyim artık.

İllaki bir yazılım çözümü bulayım diyorsan en güzeli kayan parçanın bir taraftan diğer tarafa gidiş süresini bir kereliğine ölçmek. Bunu toplam kayma süresi olarak kayıt etmek.
Bir yön değişkeni kullanarak her yön için bu süreyi belirlemek ve her start+Dur komutları aralığında süreyi timer ile ölçmek. aynı yönde gidişleri toplamak ve belirlenen maksimum süreye ulaşınca daha fazla gidemezsin deyip gidişi bloklamak şeklinde bir çözüm üretilebilir. Başkada bir şey yapılabileceğini sanmıyorum.

Ete 

onurinci

 If HAMM  > 97 And HAMM < 107 Then Gosub Fren    gibi uğraştım netice vermedi..

alt limit yaklaşıık 25 'de bitiyor üst limitte 1000 civarında bitiyor,switch fikri aklıma geldi ,oralara fiber braket ile monteledim, fakat bobinde 100Watt 2....30 MHz RF güç var ,gücü verdiğim anda oraya uzanan kablolar sistemi blok ediyor,biraz daha uğraşayım,bunu yazılımda halletmem lazım.
.
hocam bir sorum daha olacak ADC10 bit ilgili AD pinine 1 volt geliyor bunu nasıl formüle ederim,yani 1volt 25'tir gibi...

ete

Maksimum 1 volt geliyor galiba. 1 volt karşılığı adc değerin ;
1x1023/5=204 olacaktır. 25/204=0,12254902. Bunuda 256 ile çarparsak 31,37 elde edilir.
Bu sabit çrpanın olacak ama 3138 olarak kullanıp sonucu 100 e böleceğiz.
Hemen bakalım, (204x3138)/256 =640152/100=25 olarak hesaplanır sonuç doğru demektir.
Bu durumda formül. Volt=(Ham*/3138)/100 şeklinde kullanılacaktır.

Ete

onurinci

teşekkürler hocam,bu formülü öğrendiğim iyi oldu..

Powered by EzPortal